- 1 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 17:44:14 ]
- (#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。
c++厨の嵐はスルー汁。 前スレ [プログラム板] C#, C♯, C#相談室 Part47 pc11.2ch.net/test/read.cgi/tech/1214038282/ その他テンプレ>>2-5くらい
- 511 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 19:24:17 ]
- デリゲートは本当に遅いの?
ただの仮想関数よりも?
- 512 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 19:27:35 ]
- どこで聞いてきたのさ?DynamicInvokeしなければ速いよ。
- 513 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 19:52:46 ]
- C#なじてんで…
- 514 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 20:01:02 ]
- (インライン化されてない)普通のメソッド呼び出しと仮想関数呼び出しだって、
遅くなるのは間接参照1回分よ。 デリゲートはそれよりはちょっと遅いかも。 普通の関数ポインタよりも高機能なことやるのに色々オーバーヘッドかかってるだろうし。
- 515 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 21:08:04 ]
- ILも見ずに議論とな
- 516 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 21:13:50 ]
- ILからJITされた結果も確認せずに議(略ってどうやったら見れるのだろう。
仮想関数のオーバーヘッドはJITでほぼゼロになる。 インライン化もたいていJITでやってる。
- 517 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 21:19:54 ]
- ILはあんまり見ないけどJITコンパイル後のは時々見る
こっちの方が分かりやすい
- 518 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 21:42:40 ]
- C#のJITではC++でコンパイルされたコードより高速なコードが出力されると聞いたが
CPUごとに最適化できるという意味でな
- 519 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 21:45:56 ]
- そういう場合もある、程度だろ。
- 520 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 21:47:19 ]
- まぁなんにせよ初回実行にすこし時間かかります
- 521 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 21:50:47 ]
- Cとアセンブラの関係とそう変わらないと思う。
どうしても人手の最適が強い部分もあるし、 機械的な最適化の方が強い場面、あるいはそれで十分な場面も多々。
- 522 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 21:52:11 ]
- できるのとするのは別問題だけどな
- 523 名前:デフォルトの名無しさん [2008/09/27(土) 23:26:34 ]
- sts.bkukr.de/l-davoss/blog/default.aspx?BlogId=21
開発環境もポータブル
- 524 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 01:31:27 ]
- >>511
デリゲートは仮想関数よりもおそいらしい。 どっかの英語のサイトにテスト結果出てた。 普通の関数>>>>仮想関数>デリゲートってかんじ 仮想関数とデリゲートは1割ぐらいの差?それほど気にすることじゃないかと。 どっちにしろ普通の関数よりは数倍遅いので其れは柔軟性に必要な代償だと思ってあきらめるがヨロし。
- 525 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 05:28:40 ]
- フォーム上にtextboxを複数設置してるんですが
それぞれ同じイベントを記述したい時 どのようにすればいいのでしょうか? private void textBox1_Enter(object sender, EventArgs e) { textBox1.BackColor = Color.RED; } private void textBox1_Leave(object sender, EventArgs e) { textBox1.BackColor = Color.White; } フォーム上のテキストボックスをコピペしてもイベント記述は コピーされないので、困っています。 このような連番のコードを生成するアプリなどあるのでしょうか?
- 526 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 06:28:01 ]
- 全く同じ処理を行うと解釈していいんだろ
ならプロパティ ウィンドウのイベントから全部のTextBoxのEnter/Leaveに textBox1_Enter/textBox1_Leaveを設定すればいい
- 527 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 07:01:41 ]
- ありがとう、できました
- 528 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 07:58:39 ]
- >>524
> 普通の関数>>>>仮想関数>デリゲートってかんじ 普通の関数が大きく有利になるケースとして、 テストに使用した関数がサイズが小さくJITでインライン化された場合がある。 仮想関数やデリゲートの場合はサイズが小さくてもインライン化されない。 int f(int i) { if (i>=0) return i; else -i; } という関数を使用した場合普通の関数はJITでインライン化されて非常に有利になる。 最適化をOFFにすればインライン化は抑制されるが、 最適化前提で設計されている.NETのパフォーマンス測定で意味のある行為ではない。 最適化ONのままインライン化を抑制するには無駄なコードを挿入してサイズを増やす必要がある。 テストでは引数i は負になることはないとする。 int f(int i) { if (i>=0) return i; 意味のない大量のコード; -- ただし最適化で捨てられないように Randomで生成して結果はConsoleに出力するようにするなど工夫が必要 else -i; } さらにデリゲートに関してはデリゲートの生成を減らす工夫が必要になる。 これらの条件でテストすると普通の関数・仮想関数・デリゲートはほぼ変わらなくなる。
- 529 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 08:02:18 ]
- 君は注意力が足りないようだ
- 530 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 11:42:16 ]
- リフレクション経由の呼び出しくらいになるとさすがに問題になるだろうけど
インターフェイスとデリゲートなんて普通の使い方ではほとんど意味のない差
|

|