X



C#, C♯, C#相談室 Part93©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 1e06-m8Mb)
垢版 |
2017/04/22(土) 08:52:00.93ID:iVvswOrb0
■Visual Studio 2017 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/

■コードを貼る場合はこちら
http://ideone.com/

■前スレ
C#, C♯, C#相談室 Part92
http://echo.2ch.net/test/read.cgi/tech/1485589613/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0901デフォルトの名無しさん (ワッチョイ 7fa7-cT+3)
垢版 |
2019/02/17(日) 14:42:24.50ID:QIeMqQFm0
byte*からbyte[]にする方法ってない?
new byte[64];みたいに新規確保してコピーしか方法ないんだろうか
Unsafe.As等で新規確保無しで出来るかと思って色々試してみたけど上手くいかない
0902デフォルトの名無しさん (アウアウエー Sa1f-x6Gg)
垢版 |
2019/02/17(日) 15:01:42.36ID:99sHKv96a
「byte[]にする」が「byte[]とみなして扱えるようにする」って意味なら
全然別の型なんだしあるわけないでしょう。
そういう危なっかしい機能を排除してるのがC#の売りの一つだったはずなわけで

コピーする機能ならMarshalあたりにあるんじゃない?
0903デフォルトの名無しさん (ワッチョイ 7fa7-cT+3)
垢版 |
2019/02/17(日) 15:16:25.11ID:QIeMqQFm0
>>902
>「byte[]にする」が「byte[]とみなして扱えるようにする」って意味なら
そういうことです

あるわけないと言いますが、その逆はあるので出来るかなと思い
(byte*やref byteで先頭を指定し自作のstructとして読ませる。少しずらせばbyte[]を自作クラスとして読ませることも可能)
0906デフォルトの名無しさん (ワッチョイ 7fa7-cT+3)
垢版 |
2019/02/17(日) 15:27:09.29ID:QIeMqQFm0
>>904
public struct MyStruct { public int Value1, Value2, Value3, Value4 };
byte[] data = new byte[16] { 1,0,0,0, 2,0,0,0, 3,0,0,0, 4,0,0,0 };
ref var myStruct = ref Unsafe.As<byte, MyStruct>(ref data[0]);
これでmyStruct .Value1は1、myStruct .Value2は2, myStruct .Value3は3, myStruct .Value4は4と余計なコピー無しに直接読み書きできる

byte[]からclassの場合はFieldOffset指定して各フィールドを4バイト後ろにづらないと出来ないから実用は難しいけど一応可能
0910デフォルトの名無しさん (ワッチョイ df32-A2tD)
垢版 |
2019/02/17(日) 16:27:59.23ID:tKx1WgvG0
byte[]も参照型だからね、オブジェクトヘッダが付いてなければ扱えない
Span<T>でなければ、具体的なシナリオにも依るけど元からbyte[]で作って
TypeHandleとlengthのsizeof(IntPtr)*2分ずらした所を使い回す方が賢明
結局fiexdと一緒な訳だが、P/Invokeならbyte[]渡してもゼロコピーの筈だし

abstract class Union<T> where T : struct {
internal readonly IntPtr length;
public T Value;
}
みたいなオレオレ実装をILキャストした事もあったな…後はSafeBufferとか
0911デフォルトの名無しさん (アウアウウー Sa21-eq4B)
垢版 |
2019/02/21(木) 12:35:31.38ID:78/oBfjca
self containedって完全に依存なしになるわけじゃないのね
alpine用にself containedでビルドしても動かなかった
libstdc++とか色々インストールしたら動いたけどさ
dotnetコマンド同梱と比較してコンテナサイズも殆ど変わらないし意味あるのかなこれ
0913デフォルトの名無しさん (ササクッテロレ Spbd-zZPo)
垢版 |
2019/02/21(木) 14:33:57.39ID:XSMrGlqdp
SCDは.NETのランタイムを別途インストールじゃなくて同梱するってだけの話だしね
公式ドキュメントにも注釈あるけどLinuxは仕様上完全に断ち切るのは難しいんじゃない?
Windowsだと同梱のファイルだけでそのまま動くけど
0918デフォルトの名無しさん (ワッチョイ 5d2d-4qoz)
垢版 |
2019/02/26(火) 16:27:59.06ID:jgGxVc0K0
ちょくちょくポインタ代替機能についての質問があるけどさ
どんな用途でポインタを使いたいのかわかんないけど、大抵の場合はストリームで代用できるんじゃないのかな
0922デフォルトの名無しさん (ワッチョイ 6d7b-SpKW)
垢版 |
2019/02/27(水) 22:56:28.74ID:0yfFFlZD0
ポインタなんかアンマネージとのやり取りとBitmapdataでしか使ったことないな
アンマネージとのやり取りだとrefとかoutにしとけばあとは何も考えなくていいから助かる
0932デフォルトの名無しさん (ワッチョイ ffa7-3oSp)
垢版 |
2019/03/02(土) 20:18:35.52ID:zHCAEP8E0
>>928
HashSetやDictionaryは要素の数に左右されない方法でアクセスを行うから
含まれてるか否かといったような検索用途に限定すれば1個だろうが1万個だろうが常に高速にアクセス出来る
Listや配列は要素数に比例してアクセス時間かかるようになるが
0935デフォルトの名無しさん (ワッチョイ 9f2f-nxCI)
垢版 |
2019/03/03(日) 01:24:26.71ID:5kU0Dorz0
>>932
もとの要素がどこにあるかよくわからんけどな
HashSet作成して要素セットするオーバーヘッドがあるだろう
格納時にハッシュ値計算するから比較のコストが低いわけで、その分格納にコストがかかるんだぜ
0938デフォルトの名無しさん (ワッチョイ 179f-bDR4)
垢版 |
2019/03/03(日) 09:05:10.09ID:wNoJ2Bbs0
質問者ってそんなに偉いの?
そいつの質問に常に合致した話題じゃなきゃダメなの?
ひとつの質問があって、それを機会に派生してもいいし、あとは自由に意見しあえってもいい

どんだけ構ってほしいんだ
0940デフォルトの名無しさん (アウアウカー Sa6b-u4yZ)
垢版 |
2019/03/03(日) 09:27:17.06ID:qK6tlWl9a
ROM専からすると多少横道にそれてもいろんな手法を見れるほうが面白い
正直これくらいの質問なら好きにしろって感じだろ
0942デフォルトの名無しさん (アウアウエー Sadf-oIIs)
垢版 |
2019/03/03(日) 12:55:52.71ID:3ZaOSZpTa
述語の部分が、

(1) 全要素を常に == で評価
(2) 全要素を同じ演算子で評価するが、==以外の演算子も使われる場合がある
(3) 要素ごとに個別の評価方法

で最適な答えが変わりそうなんでその辺ははっきりした方がよかったかもね。
質問者は
(a==1) || (a==4) || (a==5) || (a==7)
の代替案を聞いてるんだから普通に考えれば要素数はそんなに多くないはずで
パフォーマンス云々は風呂敷広げすぎだろうw
0943デフォルトの名無しさん (ワッチョイ d763-vAvN)
垢版 |
2019/03/03(日) 13:55:56.58ID:Nfj27eon0
議論の途中で申し訳ないのですが
例えば独自クラスで、こんなのがある。

独自クラス{
string name {get; set;}
decimal num1 {get; set;}
decimal num2 {get; set;}


というのがあって、グリッドビューにList〈独自クラス〉をデータソースとして渡して表示させたいのですが
numは3,4,と増える可能性があります。(型はすべて同じ)
この場合にソースコードをメンテナンスすることなくnumの増減に対応するにはどのようにすれば良いでしょうか?
0947デフォルトの名無しさん (ワッチョイ ff1b-vAqM)
垢版 |
2019/03/03(日) 16:50:33.82ID:fEIk0m7q0
>>943
列が可変になるのならデータテーブル使うのが楽だと思う。クラスでやるとしたらexpandoで作るもなくはないと思うけど、それなら上にある通りDictionaryの方がシンプルではないかと。
0948デフォルトの名無しさん (ワッチョイ 9f2f-2ce8)
垢版 |
2019/03/03(日) 21:37:48.24ID:5kU0Dorz0
>>942
質問者がオーバーヘッド気になるとか発言してるので、パフォーマンスを考慮することに意味はあるんじゃね

まあ、ずらずらと手書き出来る程度の要素数ならどれ使っても大差ないって言っとくべきではあるかもしれんが
0965デフォルトの名無しさん (ワッチョイ b302-B/CD)
垢版 |
2019/03/14(木) 19:31:23.01ID:uF+nNtm+0
ライブラリレベルのオーバーヘッドを気にするのは止めましょう
ガベージコレクションが前提の言語を使ってる以上無駄な努力に終わります
性能絶対重視なら最初からCやASMで書いた方が良いし
よほどのスパーハカーでもない限りそんな努力が報われるほどの性能差にならないと思われます
0967 ◆QZaw55cn4c (ワッチョイ 6fe9-h1+v)
垢版 |
2019/03/14(木) 21:49:31.03ID:NTAm4EVS0
>>966
asm の教科書を書いていますが、「そのお題、asm で書く理由がない…」という深刻な問題に直面しています
asm で書くのに適したお題は何かありませんか?
0968デフォルトの名無しさん (ワッチョイ ffad-OnF4)
垢版 |
2019/03/14(木) 21:52:50.86ID:SvZaCm1k0
最初のCコンパイラかな
0974デフォルトの名無しさん (アウアウエー Sadf-FtxA)
垢版 |
2019/03/14(木) 23:43:27.63ID:fi3bTXEpa
>>972
必要を無視すればBCD演算とか。
最終的にBCD演算命令に翻訳されるようなコードをC#では(Cでも)書けないはず。

まあx86ならマルチメディア系の命令とかが王道なんだろうけどね知らんけど。
0976デフォルトの名無しさん (ワッチョイ ffc7-kdx8)
垢版 |
2019/03/15(金) 20:54:11.25ID:lWIPCB/k0
20年ぐらい前の1クロックが今より数十倍以上高価だった頃なら、
ASMによる人力高速化も(コスト的に見合うという点で)意味があった

Cコードで表現されてない知識も使ってちっちゃな関数でも結構簡単に数十クロック程度は高速化できた
Cコードで表現されてない部分を使えば、今もやろうとすれば高速化はできると思う(コストに見合わないだけで)
(変数aとbは実はいつも a<b なのでこのニーモニックが使えるとか、
ここの条件判定文は実は別の変数を計算したときのレジスタのフラグと同じ意味なので計算しなおす必要はないとか)

>>975 の話題に近いけど、
今ならASMの意味があるのはJITまわりとかかな?
0977デフォルトの名無しさん (ワッチョイ b302-PKKy)
垢版 |
2019/03/15(金) 21:48:50.55ID:D5NVJqkY0
コンパイラはパイプラインでデータハザードが起きない様に計算して命令の組み替えしたりする。
人間がそこまでできるかな?
オレは20年ぐらい前にmemcpyを高速化するためにアセンブラで組んだ。
今思うとCで組んでコンパイラに最適化させるべきだったかもね。
若気の至りだ。
0979デフォルトの名無しさん (ワッチョイ bf32-h1+v)
垢版 |
2019/03/16(土) 00:15:39.88ID:sQCNGdE30
ERMSBなんかを考えるとコンパイラも小手先なんかね
実行ハードでスケールするか、安定的な最適化か
汎用性を考えれば普通は後者になるだろうけど

というかC#ならCILレベルに留めるべきではねか
0982デフォルトの名無しさん (ワッチョイ ff61-ynPM)
垢版 |
2019/03/16(土) 15:56:32.11ID:zOgp3uDK0
>>980
wasmになる前のLLVMの段階で既に最適化が出来る。
あと、詳しくは分からないが、wasmになった後の最適化も、
Emscriptein の opt.exe で一応はできるらしい。
但し、asm.jsとの「グルー」が複雑に絡んでいるので、
何をやっているかを理解するのはかなり難しく、
wasmで最適化しているのか、asm.jsで最適化しているのかは
忘れてしまった。
0984デフォルトの名無しさん (ワッチョイ cf7b-Qay2)
垢版 |
2019/03/16(土) 20:27:45.17ID:0AnVFDDg0
スレ終わりなんだから内容気にせず埋めてしまえwここ即死判定もないし
GetFilesやGetDirectoriesのようなメソッドでエクスプローラーと同じ順に格納してくれるメソッドが欲しい
ソートし直すのたまに忘れてしまう
0992デフォルトの名無しさん (アウアウカー Sa47-GKay)
垢版 |
2019/03/20(水) 07:42:02.03ID:74ozQqG6a
Visual Studioって2015と2017両方いれて、2015だけ綺麗にアンスコできる?
0995デフォルトの名無しさん (アウアウカー Sa47-GKay)
垢版 |
2019/03/20(水) 12:21:41.32ID:NDw+q9p/a
>>993
ありがとう
そ、それは置いといて(笑)
どちらか片方だけアンスコしたときにもう片方に必要なもんを削除されたりはしない?
0996デフォルトの名無しさん (アウアウエー Sadf-FtxA)
垢版 |
2019/03/20(水) 12:41:43.72ID:JR1ztFlDa
VSに限らず明らかなNGは後から古いバージョンをインストールする行為だけのはず
アンインストールに関しては「意図としては」大丈夫なように作ってあるはず。

やってみたら?
最悪新しい方の修復インストールかOSの復元機能で何とかなるでしょ
1000デフォルトの名無しさん (ワッチョイ cf7b-Qay2)
垢版 |
2019/03/20(水) 18:54:52.24ID:jJ3kq/hZ0
2015の後に2017入れて2015アンインストールしたけど問題なかった
そのあとふと2015入れてみたら俺環だろうけど2015でビルド出来なくなった。2017の方は問題なし
そして問題のあった2015を再びアンインストールしたけど2017でずっと問題なし
>>995
2017だけ使う分には問題ないはず
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況