1 名前:デフォルトの名無しさん mailto:sage [2017/01/28(土) 16:46:53.58 ID:op86qfG/.net] ■Visual Studio 2015 Community & Express (無償の統合開発環境)等はこちら www.visualstudio.com/downloads/ ■コードを貼る場合はこちら ideone.com/ ■前スレ C#, C♯, C#相談室 Part91 echo.2ch.net/test/read.cgi/tech/1467211515/ ■次スレは>>970 が建てる事。 建てられない場合は他を指定する事。
830 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 06:53:09.50 ID:DSZn496T.net] >>785 おっさんいつの知識で語ってるんだよ w そんなもん主記憶への書き込みに比べたらゴミにしかならんぞ
831 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 07:19:52.20 ID:FNNFGlTu.net] >>793 CPUというよりも、CPUとメモリーのスピード差が決定的すぎるんだよ メモリーにアクセスするとCPU命令で数千命令程度の待ちが入る 余りに待ちが長いので、その間に色々計算ができるようにCPUには工夫が入っていたり マルチCPUにして、別のCPUが計算している間に書き込んでしまえといった方面で創意工夫がされているんだ。 境界チェックくらいなら、書き込み待ち時間で十分にできるから他のCPUにまで影響を与えないようにして 書き込みスレッドは一本にして、他のCPUは別のメモリーアクセス以外の仕事ができるように開けておいた方がトータル良い結果を出すって事。
832 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 08:39:19.14 ID:2TLG8dmE.net] どうでも良いが、メモリーに書き込まないスレッドとかありえないと思うんだ・・・
833 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 10:17:04.48 ID:xhr4sxE5.net] 本当に小規模な計算ら、レジスタだけで解決できるだろう
834 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 13:14:58.98 ID:mVrmFNTT.net] C++ならともかくC#で気にする必要のあることなんだろうか
835 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 13:31:22.91 ID:FNNFGlTu.net] >>799 知っていれば無意味な並列化とかしなくて済むだろ そうすればソースも分かりやすくすっきりするし 0フィル処理なんて詰まらない処理なら、効果はてきめんだ。
836 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 13:43:29.67 ID:xhr4sxE5.net] 無意味な並列化にかかる工数と、無意味な並列化は逆効果ということを検証する工数 どちらがよりコストがかかるんだろうか。
837 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 13:49:55.01 ID:FNNFGlTu.net] 高速化目的で並列化しなきゃならない程の状況なら、検証はするだろ。 で、並列化するときにどういう方向性が効果的かってのを知っておくことは コードを手早く書く上での基本テクニックだよ 無意味なコードは、そもそも書かないし試さないというショートカットができるからね。 将棋の名人でもすべての手を読んでいる訳じゃない、効果的な枝だけを深読みしているみたいなもんだ。
838 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 14:09:41.46 ID:xhr4sxE5.net] 並列化をしたくなるのは、代替がそういう状況に陥る前の段階での思いつきなんだよねたとえば今回の0フィルとか。
839 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 16:09:48.66 ID:aK+zC0HQ.net] 並列化の基本はいかに粒度を上げるかだよ 極端な話、プロセスを2つに増やして2倍速くなるならそれでいい ミクロな視点で考えるのはほとんどのケースにおいて時間の無駄
840 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 16:28:44.49 ID:FNNFGlTu.net] >>803 こういうのってコンピュータの仕組みが分かってしまえば、高速化手法として頭に浮かぶことすらないですから。 考えるまでもなく除外なんですよ、脊髄反射。 よく似た物にページングのチューンなんかがあるね。 並列化したら、ずっと仮想メモリにページアウトページインばっかりするようになってしまうのが見え見えのコードとかね。 こういうケースが見えて居る時にマクロ視点でプロセス増やして・・・と考えることは無いねw
841 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 18:05:14.12 ID:sVC5qkLg.net] >>805 コンピュータの仕組みなんて常に変わっていくもの 脊髄反射で手法を除外するのはよくない あと一レス目で指摘するならともかく、問題点が整理されてから 後出しで手法をダメ出しするのはカッコ悪い
842 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 18:18:41.10 ID:xmE6C1ua.net] >>796 それってCPUの実際の動作じゃなくて単なる考え方だよね・・・
843 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 18:34:37.22 ID:2TLG8dmE.net] と、言うより>>796 は思いっきり出鱈目ですわ 境界チェック云々はマルチCPUじゃなくてパイプラインで解決されるからプログラミング要らずだし
844 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 19:49:41.71 ID:woBc/tdN.net] >>79 > メモリーにアクセスするとCPU命令で数千命令程度の待ちが入る 今時のメモリー(主記憶)のレイテンシーって10ns以下だと思うが10nsで1,000命令も実行できるCPU教えてくれ
845 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 20:53:44.12 ID:FNNFGlTu.net] >>808 まぁ、その手の事を指摘したつもりだけれどそう読んではくれないみたいだね。 あと、最近のはパイプライン以外にも命令の並べ替えやら入っているからw ホコポコ無意味に返信している内容は、多分自演なんだろうけど、そろそろやめたら。 こういうのはゲーム作ったことあるような人間なら常識の範囲なので、考えるまでもないような話の類。 俺以外のヤツもたくさん指摘しているが、それだけ普通に知っている人は多い話なのだよ。
846 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 21:04:00.56 ID:1tPgrneG.net] いつの時代のどのハードのゲームだよ アセンブラのバイトコード気にするとか20年前の話だろ いっぽかたが計算してる間に他のCPUで書き込みするのは 同時にメモリに書き込もうとして競合するのを避けるためじゃないん
847 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 21:15:04.20 ID:FNNFGlTu.net] しつこいねぇ この手の話をゲーム屋が知ってるのは、何かの本で読んだとかではなくて ソニーとか任天堂とかマイクロソフトとか今は逝ってしまっているセガとかハード屋が セミナーで現在のハードの状況と止めた方が良いコードなんかのヒントとして教えてくれるからなんだよ。 その知識を持って、インテルの資料とかを読めば大体の事は分かるんよ。 もちろん素から勉強している人も居るだろうけどね。 今回の話はマシン語ではなく、最近のメモリー事情の話なんだよ。 連続アドレスの書き込みor読み出しには強いが、飛び飛びのアドレスにアクセスすると弱いダイナミックメモリー事情とかの話。 メモリフィルとか連続アドレスをアクセスしているのに、わざわざ壊すようなマルチスレッドはそういう点でも駄目なんだな。 決定的にはメモリーが遅いという点に尽きるが。 こんな風に駄目な理由に一つ以上のネタがあるんだよ、だからやるまでもないの。
848 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 21:29:31.37 ID:1tPgrneG.net] ほんとに理解してるか? パイプラインで境界チェックを解決って意味が分からん どうやってんの
849 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 21:32:07.91 ID:3oML3qao.net] そろそろ死ねよチンカス勢 これ以上口を聞くとスレを埋めるぞ
850 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 21:46:56.27 ID:2TLG8dmE.net] >>813 パイプラインがRISC時代に進化して、レジスタが干渉しなければインストラクションを同時実行するようになったから 件の例だとメモリクリアと境界チェックを同時にヤるんだわ だから一つのCPUは見かけ上メモリクリアを境界チェックの時間0で延々と実行する コレを実行するのは一つのCPUだし、同時実行に人が介在すること
851 名前:無いのでプログラマーは何もヤることはありません ホント>>796 は酷い出鱈目ですわ [] [ここ壊れてます]
852 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 22:00:11.37 ID:oixKZUzL.net] 何を争ってるのかさっぱりわからんw ただ昨日書いた>>776 が間違ってることはよくわかった。 よく考えればこれ486の時代とかでも当たり前だw すまんかった
853 名前:デフォルトの名無しさん [2017/04/13(木) 22:00:58.20 ID:FNNFGlTu.net] >>815 >境界チェックくらいなら、書き込み待ち時間で十分にできるから他のCPUにまで影響を与えないようにして これがパイプラインやらディレイスロットに相当する話として描いたんだよ 計算時間隠ぺいはパイプラインだけじゃないからな、不正確になるだろ。
854 名前:デフォルトの名無しさん [2017/04/13(木) 22:08:08.05 ID:FNNFGlTu.net] ちなみに昨今のCPUは、機械語命令を別の内部用の命令に一旦変換することで互換を取っている この変換で色々な隠ぺい処理がされる。 パイプラインの直接関与は無い。
855 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 22:55:07.48 ID:UJp3daw4.net] そういうのはC++使いにやらせとけ
856 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 23:32:52.23 ID:ZueE7S//.net] CPUの種類もいっぱいあるし実装すらmonoとかあるんだから考えても無駄だよ ふつーにヤレ
857 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 23:35:00.21 ID:8HEXXOrW.net] .NET 4.7でTupleも標準で使えるようになったと思ったら Windows Server 2016でまだ使えない
858 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 23:51:42.17 ID:qn5HP47l.net] >>821 4.7がまだインストールできないってこと?
859 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 00:17:56.85 ID:SWEjH6Xz.net] >>788 GCってガベージコレクタか? メモリを回収するときにゼロクリアする必要はないんじゃね。痕跡を残したくないとかなら分からないでもないが。。
860 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 07:19:22.25 ID:KckXzUzz.net] >>822 4。7って自動で入るのか?
861 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 08:29:17.03 ID:pJlkTYEJ.net] .NET Framework 4.7 is part of Windows 10 Creators Update. What about other Windows versions? You can start using .NET Framework 4.7 today on Creators Update. It will be available on other Windows versions soon. . NET Framework 4.7 will support the same Windows versions as .NET Framework 4.6.2. It is an in-place update. Windows10だけらしい
862 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 19:41:38.09 ID:zACr9/Dt.net] 4.7なんて何に使う気なんだ
863 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 19:57:13.78 ID:vwaM1ek4.net] NuGetで取ってこなくても最新の機能が使えるとか ValueTupleとかValueTaskとか 自分も試しにアップデートしてみたがまだ使えないみたいだね もうちょっと纏めてからアップデートしてくれた方がいいんだけど アップデートが細かすぎる
864 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 20:03:25.72 ID:znF0F+kk.net] >>826 何に使うのかは知らんけどtupleを使いたいんだろ
865 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 20:10:48.82 ID:pJlkTYEJ.net] 知っていると思うけど、VSインストーラ立ち上げて4.7を追加インストールします Windows10をCreatorsUpdateしてから処理したから、必須なのか不明ですが 多分それも必要です
866 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 20:19:05.97 ID:bLw6Whqv.net] Tuple<T>ってC#4.0からあったと思ったがそれじゃなく?
867 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 02:12:01.30 ID:aGMB9daN.net] >>830 それとは違う
868 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:12:37.06 ID:iCdjVYwG.net] >>818 ペンティアム2を昨今のCPUって言う人初めて見たw てか、それらはx86のRISC化なんだが、 RISCっても
869 名前:のはパイプラインを高度に利用してトランジスタを増やさずに多重実行する技術だよ パイプラインの関与と言うか、要です [] [ここ壊れてます]
870 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:16:28.45 ID:C33P0hB8.net] アセンブラできない奴はまともに最適化はできない。これだけ。
871 名前:デフォルトの名無しさん [2017/04/15(土) 10:18:54.18 ID:3qBkA9st.net] アセンブラとか老ガイジかな?
872 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:23:22.48 ID:C33P0hB8.net] c#のデバッグでなんで機械語が表示できるようになってると思ってんだ? 低脳馬鹿デジタルネイティブさん >>834
873 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:35:26.60 ID:QicJR8ZP.net] ValueTupleって最初はワクワクしたけど使い所あんましないな どういう時に使うんだこれ
874 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:36:36.36 ID:qt9qpnGQ.net] うわあ
875 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:43:55.01 ID:iCdjVYwG.net] >>836 out 使って値を返しているやつを素直に書けるだろ
876 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:49:59.89 ID:3WGNKYp+.net] >>832 まてまて、SIMDとパイプラインと並列処理は意味が違うぞ。 言いたいことはわかるけどなw
877 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:50:24.08 ID:iCdjVYwG.net] >>835 C#のILをJITがマシン語に変換して、更にCPU内部でRISC形式の命令に変換 更に命令の順番を最適化して多重実行をするわけで、ILを見たところでどれが効率高いかなど判断するのは人間業じゃないな せいぜいキャッシュサイズを意識する程度だろうが、2つのループを同時実行されることまで考慮したらどうすれば良いのやら・・・
878 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:57:05.83 ID:iCdjVYwG.net] >>839 SIMDじゃなくて、通常のオペコードをRISC的な内部オペコードに変換するんだよ で、10段とか15段に細分化されたパイプラインを使って、パイプラインに繋がった演算装置を 複数の実行ユニットが使いまわしをしてトランジスタ増やさずに見かけの同時実行数を5とかに増やす まあ、それをどうやって実現しているのかさっぱり分からんけどな
879 名前:あ mailto:sage [2017/04/15(土) 10:57:43.50 ID:4VXj2s/u.net] >>840 どこが効率悪いかはわからんか? あー、アンボクシングかかっとるわ、とか、 これのせいでストールしよるな、とか。
880 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:00:42.88 ID:iCdjVYwG.net] >>842 デバッグに使うのは当然なんだが、通常のソースレベルの効率以上の情報をILから探し出すのは至難の業です 最終的な実行環境は俺を含めてハードの素人には手を出せない神の領域かと
881 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:34:57.52 ID:QicJR8ZP.net] >>838 outはそもそも使わないし TryXxx系はValueTupleよりout varの方がスマート
882 名前:あ mailto:sage [2017/04/15(土) 11:39:27.67 ID:4VXj2s/u.net] >>843 コーディング中はそりゃ、あんまりそこに固執すると目的地にたどり着きさえしなくなっちゃうもんな。 コンパイラが賢かったり、JITが地味に賢くなって要らない小技になったのも沢山あるし。 たまに見ると面白いよ。あ、これメモ化しちゃうんだ、とか。
883 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:39:28.67 ID:UPL5S+RA.net] そうそう pythonでやってたことをc#でもできるようになったものって 実際使ってみてもいまいちなんだよな めんどくさいから欲しかった機能だけどc#流になるとそれ以上にめんどくさいしスマートじゃない
884 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:44:51.81 ID:eeh5f4V4.net] >>832 ペン2には一言も言及してないのに勝手にそうするキチガイさんですか? >>839 これも自演でしょ 多分10年以上も前からここで、板が白けきるまで偉そうな事いいながら荒らしまくっていた人なんでしょうけれど。 そろそろ死んでください。
885 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:49:23.70 ID:iCdjVYwG.net] 今回の拡張の中で ref var a = hoge
886 名前:(); と言う、参照戻り値ってのの使い方が難しいわ [] [ここ壊れてます]
887 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:51:55.21 ID:iCdjVYwG.net] >>847 >、機械語命令を別の内部用の命令に一旦変換することで互換を取っている コレはPen2とかK6辺りから始まりました 20年前の技術ですね
888 名前:デフォルトの名無しさん [2017/04/15(土) 11:52:06.28 ID:mE+AhP/n.net] 初心者です C#はメモリ管理を気にしなくて良いと聞きました 本当でしょうか?
889 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:54:00.80 ID:eeh5f4V4.net] たしかCore2以降は、VILW命令に変換していたと思った。 命令ストリームからVILW命令6スロット分に変換して 6命令ずつ同時実行する事で低クロックでも高速に動作とか。 x86系以外では、スーパースカラの採用も多いみたいだね。
890 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:55:39.30 ID:P11oDSMM.net] 本当だよ 2人くらい何か囀ってるように見えるけど、キチガイだから気にしてはいけないよ
891 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 12:00:32.47 ID:3WGNKYp+.net] >>847 俺、死ぬんか?
892 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 13:12:21.09 ID:7hkWD0i5.net] >>850 メモリ解放なんかは自動ってことになってるけど メモリ確保やら初期化やらは気にしないとだめだし「メモリ管理」の内容による
893 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 13:18:16.99 ID:GC6K0tB8.net] >>823 これ、まともに回答しようと思うとひどく大変なんだが…… 823がGCの内部実装を把握しているうえでの指摘にも見えるし、 初心者の思いつきの質問にも見えるし…… 初心者向け: ヒープ確保したら0にクリアされてる メモリを回収後、再利用されるまでに0クリアする必要があるってこと 把握してる人向け: メモリコンパクション時にページングの機構使って0クリアしてるのかってことなら、 .NET Core のソースで確認しようと思ったけど gc.cpp だけでも1.2MBあって挫折した >>850 初心者のうちは気にしなくていいよ
894 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 13:43:04.38 ID:5VFPMUgC.net] >>846 C#は式指向のシンタックスを目指してるから、あくまでステートメントに拘るPythonとはだいぶ方向性が違うよ 可能な限り全てのメソッドを式形式で定義する縛りでコーディングしてみたらいい そうすればC#7の仕様の意図するところは簡単に理解できる
895 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 14:29:19.96 ID:56TRC7nM.net] みんな詳しすぎ 頭いいんだな
896 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 14:40:07.25 ID:3WGNKYp+.net] >>842 >>843 思ったけど、あのVTuneってそんな機能あるんかな?
897 名前:デフォルトの名無しさん [2017/04/15(土) 15:19:31.88 ID:A0YDVHHt.net] 昔Excelを弄ってた時、Excelのオブジェクト解放したはずなのに 単体テストし終わってからタスクマネージャー見るとExcelが一杯残ってた(通称ゾンビ)。 シートやらブックやら解放してから最後にExcel本体解放してってやってたけど 今は一発で解放できるんだよね? メモリ管理とか気にしないけど、こういうのは気になる。
898 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 15:29:43.17 ID:8JN0d/j3.net] 所謂アンマネージリソースを閉じてないとC#であってもゾンビ化することはたまにある
899 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 15:39:12.33 ID:eeh5f4V4.net] >>859 Excelは無理だよ、細かくReleaseComObjectしなきゃ駄目だし、しても残る時は残る。 残ってしまう事を前提に組むしかない
900 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 15:41:12.30 ID:aGMB9daN.net] >>861 しても残る時は残る、はし足りないだけでは。
901 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 15:43:39.01 ID:eeh5f4V4.net] >>857 自分の書いた内容が正しいという流れになるまでしつこく続ける自演キチガイが一匹いるだけ。 もう相当昔から粘着しているからいい年だと思うんだが、よく生活できてるなって感じだな。 それ以外の人は普通だよ。
902 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 15:58:16.95 ID:3WGNKYp+.net] ちなみに俺は違うからな
903 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:02:07.82 ID:eeh5f4V4.net] 自分が得意じゃないと思う領域は黙っておけ、そして誰か
904 名前:詳しい人がレスするまで その質問を流すなキチガイ あと、自分の得意な領域に引き込もうと変な流れに作り替えるな。 掲示板が機能しなくなる どうせなら死ね とまあそんな所ですな [] [ここ壊れてます]
905 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:06:10.39 ID:OxStzCoo.net] >>863 気づいてないみたいだけど、悪いけど君の態度も相当エキセントリックに見えるよww 少なくとも>>832 は文脈的に妥当な反論をしているようにしか見えんけど、 「俺にたてつく奴はいつものキチガイ(って誰だよw)だ!!」って感じでかなり普通じゃない。 余計なお世話だろうけど、いい歳こいてるんだろうからもうちょっと自分を客観的かつ批判的に 見ることを覚えた方がいいんじゃないんだろうか。
906 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:07:40.04 ID:lvAT8XK9.net] >>859 > 昔Excelを弄ってた時、Excelのオブジェクト解放したはずなのに > 単体テストし終わってからタスクマネージャー見るとExcelが一杯残ってた(通称ゾンビ)。 ちゃんと ReleaseComObject(comObject) 呼んでないだけだろ なんで IDisposable にして Dispose で解放するようにしなかったのか謎
907 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:09:12.98 ID:eeh5f4V4.net] 駄目だな、このキチガイ・・・ はよ死ね
908 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:13:19.25 ID:C33P0hB8.net] デストラクタの動作タイミングが制御できない時点で逆にいろいろ管理できなくなってトラブルの元になってる。 結局のところ欠陥言語なのだ。
909 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:16:13.49 ID:OxStzCoo.net] >>867 根拠があるのかと言われれば正直ないけど、ぶっちゃけ全部のオブジェクトを いちいちReleaseComObject呼ぶなんてやってられないし、やらなくてもそれで 「ゾンビ」が残ることはないようだから、必要ないんじゃないのかな。 そんなことよりプロパティが返すオブジェクトをメソッドチェーン的に使わない(面倒でもいちいち変数に 入れてから使う)とか、その手の基本が大事だね
910 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:18:04.02 ID:eeh5f4V4.net] Excelのケースは多分デストラクタというより、Excelのスレッドモデルに問題があるんだと思う。 lock方式でもInvoke方式でもない、少々行き当たりばったりな排他制御をしてるようだ。 古いアプリなので今更改められないのだろうね。
911 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:31:33.32 ID:OxStzCoo.net] エンゼルハートって映画あったな 探偵がロバートデニーロに殺人鬼を探すように依頼されるが、探していた 殺人鬼は探偵自身だったってオチ 「いつものキチガイ」も実は言ってる本人自(w
912 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:33:19.87 ID:3WGNKYp+.net] はいはい、俺が悪かったってことで仲直り。 今後はこのスレ貢献に頑張ろう…でいいやん。 な
913 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:33:31.45 ID:nXYdKgHp.net] ExcelCreatorが楽すぎて戻れない
914 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:36:28.32 ID:eeh5f4V4.net] >>873 普通なら、それでOKなんだけどね この人2000年頃にやってきて、際限なく荒らしまくって誰もいない状態にしやがったから。 たまーに戻って死んだかなとか見ているんだが、ご健在のようです。(はよ死ね
915 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 16:57:08.88 ID:aGMB9daN.net] >>870 そんな基本は聞いたことが無いのだけど、 プロパティが返すオブジェクトをメソッドチェーン的に使うと、どういう問題があるの。
916 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:07:01.27 ID:mW9XRjOW.net] Disposeされないオブジェクトが量産されてリソースリークするに決まってんだろ 一つプロパティにアクセスしたら結果を変数に入れて礼儀正しくDisposeする これをすべてのメソッド呼び出しとプロパティ・インデクサーアクセスについて行う
917 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:09:24.07 ID:nXYdKgHp.net] >>877 おもしろい冗談だな
918 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:16:22.23 ID:UPL5S+RA.net] return a,b;で返したのを こんな感じで受け取れれば楽なんだけどな a,b=method(c);
919 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:31:49.05 ID:OxStzCoo.net] >>876 ゾンビ なんだかVBerチックなおまじないのように聞こえるけど
920 名前:そうじゃない。 もっとも、どうしてそうする必要があるのか、詳しい理屈は忘れちゃったけどw 明示的に変数で参照されてないCOMオブジェクトは相互運用アセンブリが適切に破棄できないとかなんとか まあ、変数に入れなきゃReleaseComObjectを呼ぶこともできないよね [] [ここ壊れてます]
921 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:33:16.72 ID:7hkWD0i5.net] excelはC++から使ってもゾンビるよ
922 名前:デフォルトの名無しさん [2017/04/15(土) 17:38:17.93 ID:A0YDVHHt.net] >>867 昔の話だよ。
923 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:41:04.42 ID:aGMB9daN.net] >>880 結局ReleaseComObjectは必要なのね。
924 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:47:17.96 ID:jssTx07C.net] >>859 昔のプログラムメンテする必要が有って、丁度それに出くわして同じ方法で対応したわ 結局そのロジック切り捨ててOpenXMLで読み書きしちゃったけど
925 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 17:54:59.95 ID:OxStzCoo.net] >>883 いやいらんと思うよ https://web-beta.archive.org/web/20080306103320/jeanne.wankuma.com/tips/programing/releasecom.html ↑によるとReleaseComObjectは「保険」らしい オブジェクトをちゃんと変数につっこんでから使えは一応ソースあった。 「仕様」の一言で、どうしてそうしなきゃらなんのかの理屈は書いてないが https://support.microsoft.com/ja-jp/help/317109/office-application-does-not-quit-after-automation-from-visual-studio-.net-client
926 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 18:00:32.55 ID:OxStzCoo.net] まあVB6みたいに参照カウント見てラッパーオブジェクトの破棄をやってるからってことなのかな こま切れのレスで申し訳ない
927 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 18:14:19.64 ID:eeh5f4V4.net] >>885 >ガベージ コレクションを実行して解放することができますが、こちらはあくまでも保険です 読んでみた限り、GCが保険でReleaseComObjectでやれという事に読めますね。 マイクロソフト公式も保証されるわけではないという感じですね。 実際、これはやってみたが上手くいかないケースはちょくちょく発生します。 次善策以上の対策は取れないと思われます。以前サポートに質問した時もそんな感じの回答でした。
928 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 18:33:54.48 ID:OxStzCoo.net] >>887 あー確かにその通りだねw 適当なこと言ってごめん
929 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 22:36:26.65 ID:tyUWSBTM.net] >>879 タプルに括弧が必要なのはやむを得ないかな。変数宣言の文法変えるわけにもいかないし。
930 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 22:56:40.40 ID:lvAT8XK9.net] >>881 ちゃんと作ればゾンビったりしないよ デストラクタで確実に解放できるからその点だけで言えば C# よりむしろ楽 >>885 > ↑によるとReleaseComObjectは「保険」らしい それ、それページ書いた人がちゃんと理解してないだけ そもそもGCはCOMなんて意識してないからCOMの解放なんてしないし 詳しくはここら辺を見て https://blogs.msdn.microsoft.com/office_client_development_support_blog/2012/02/09/office-5/
931 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 23:54:44.22 ID:X3IC3wwW.net] ググってもよくわからんのだけど GetType()+typeof()で型判定と isでやるのはどっちが速い?
932 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 00:20:09.43 ID:SqhlDt4o.net] >>891 一時変数に入れたりしないで単純な GetType == typeof の形に限り前者 JITレベルで最適化がかかるみたい
933 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 01:16:43.35 ID:dwmihMuF.net] >>855 GCのソースを見る気はしないけど0クリアはやってないと思う。 どう考えても時間の無駄。 変数を使用するタイミングで初期化が行われて、ものによってゼロクリアが行われるってだけじゃないんかね。 だから大量な領域をゼロクリアすることはそうそうないと思ってるんだけど。 例えばintの長い配列を確保したときとかくらい。
934 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 02:15:50.20 ID:UDjczAnn.net] >>893 ヒープのオブジェクトは new した時点で内容が0クリアされてることは仕様
935 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 06:55:53.07 ID:dwmihMuF.net] >>894 それはメモリ確保後に初期値で初期化されたってことででしょ。どっちにしろGCで大量にゼロクリアが必要にはならないよね。
936 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 08:00:22.29 ID:uS8rD07o.net] どーせ、一番下でVirtualAlloc走ってんでしょ。そこで0クリアなんじゃね?
937 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 08:43:50.68 ID:dr2cdwts.net] 0クリアをどのタイミングでしているかは知らないが 早めの0クリアがセキュリティーに貢献するであろう事は予想できる。 今そうでなくても、そのうちに使用しなくなったタイミングで可能なら0クリアという形になったとしても驚かない。
938 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 08:49:20.74 ID:dr2cdwts.net] ちなみに自分はガベコレが効率よく機能してくれるよう、使用しなくなったら0クリアはしている。 巨大なツリー構造を作って大量のヒープを使い始めると、参照を移動するだけでも結構なCPU時間を取られるようなので。
939 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 09:00:30.49 ID:nOhMz2bP.net] 破棄されるメモリへの(読まれない)書き込みを省略する最適化を行うコンパイラもあるし、 一律0クリアって方向にはならないだろうねぇ。 セキュリティ確保のためにわざわざ省略されない0クリアなんて機能を用意するくらいだし。
940 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 09:02:08.11 ID:H6tmXYoH.net] 0クリアとnull代入は別物だぞ
941 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 10:39:40.78 ID:yhNZe4vR.net] >>897 > 0クリアをどのタイミングでしているかは知らないが 何のためにデバッガがついてると思ってんだ。
942 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 11:27:43.64 ID:UDjczAnn.net] >>896 あー、それそれ .NET Core の gc フォルダ内のコードに VirtualAlloc の RESET_MEM で ゼロクリアしてる箇所がいくつかあった たぶん、コンパクションした後に残ったゴミ領域を VirtualAlloc で ゼロクリアしてると思うんだが、そこは探しきれなかった >>895 初期値(0)で初期化されたってのはゼロクリアなんだが…… ttp://ufcpp.net/study/csharp/rm_default.html お前の言う初期値は別のことを指してるのか? > どっちにしろGCで大量にゼロクリアが必要にはならないよね。 メモリ確保時のゼロクリアってのはヒープ管理の行うこと ヒープ管理はGCとは切り離せないの だから .NET Core のゼロクリアのコードだって gc フォルダ内に配置されてるんだし
943 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 11:44:56.24 ID:EJt90aDw.net] >>902 横からごめん。無知なので教えて。 ・GC って概要として不要になったメモリを解放する機能って理解はあってる? ・メモリ確保時に初期化が実行されるとの理解はあってる? ・一般的な挙動として、メモリ確保と GC は別物との理解に誤りはある? ※実装が GC 時に初期化しているかどうかではなく、GC と言う言葉の定義に初期化が含まれるかと言うこと 自分は上記が正しいと思ってるから、 >>895 の内容に違和感を感じなかったんだ。
944 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 12:08:09.86 ID:uS8rD07o.net] >>903 君は正しい
945 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 12:11:25.63 ID:SqhlDt4o.net] >>903 CLRの構造としては、GCはメモリ管理一般を担うコンポーネントである だからメモリ確保も初期化するのもGC GCってメモリの使用状況に応じてオブジェクトを動的に再配置したりとか色々裏で頑張ってるから、 単純に 確保/解放 と割り切れるもんじゃないんだよ
946 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 12:21:18.23 ID:qeC+G70E.net] >>891 前者でもいいけどtypeof(シールクラス)にしないとダメだよ
947 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 13:21:57.61 ID:UDjczAnn.net] >>903 >・GC って概要として不要になったメモリを解放する機能って理解はあってる? はい >・メモリ確保時に初期化が実行されるとの理解はあってる? 正確ではない ヒープからオブジェクトを確保したら初期化されていることが決まっているだけで、 初期化
948 名前:フタイミングは決まってない 既に初期化済みの領域から割り当ててるはず >・一般的な挙動として、メモリ確保と GC は別物との理解に誤りはある? > ※実装が GC 時に初期化しているかどうかではなく、GC と言う言葉の定義に初期化が含まれるかと言うこと 誤りはない ただし片方だけではメモリのシステムとして機能しない >自分は上記が正しいと思ってるから、 >>895 の内容に違和感を感じなかったんだ。 .NET の実装によるので 「GCで大量にゼロクリアが必要にはならない」 は誤り .NET Core の実装ではページングの機構を使って大量にゼロクリアしてる(と思う) オレオレCLR実装でGC時ではなく、オブジェクト確保時にゼロクリアする実装というのはあり得る [] [ここ壊れてます]
949 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 14:12:52.31 ID:0ImhO/qF.net] >>903 > GC と言う言葉の定義に初期化が含まれるかと言うこと 含まれていないけど、実質同じ。 GCってプログラマの負担を減らす為の物なのに、 いちいちゼロ初期化必要だとコンセプトとしておかしいでしょ。 まともなGCならゼロクリアされている。CLRもそう。 仕様としては、 △ > ・メモリ確保時に初期化が実行されるとの理解はあってる? ○ ・メモリ確保時には初期化済み であって、どのタイミングで初期化するかはGCの実装による。 同じ事はOSでも行われていて、以下ページのZeroed参照。 nyaruru.hatenablog.com/entry/20080430/p2
950 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 15:02:23.81 ID:79m5iU1q.net] なんかすごい重箱モードの議論だねw いや批判はしてないですよ別に
951 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 18:44:26.20 ID:dr2cdwts.net] 粘着質な人が居ると困りますねw
952 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 18:59:23.11 ID:I10lJTDS.net] >>892 ,906 そうかTHX. isの方がなんとなく速そうだと思ってたが案外そうでもないんだな
953 名前:903 mailto:sage [2017/04/16(日) 20:38:49.89 ID:EJt90aDw.net] >>904 ,905,907,908 教えてくれて、ありがとう。 自分も MSDN の文章を読んだりしてみました。 斜め読みだから読み落としてる可能性も高くそうしたらごめんなさい。 [一般的定義] ・GC は概要として不要になったメモリを解放する機能のこと ・一般的な挙動として、メモリ確保と GC は別物 [CLRの仕様] ・メモリの確保も解放も GC の機能の内 ・確保されたメモリは初期化されている [CLRの実装] ・GC 時にメモリを初期化してるっぽい ふつう、挙動を考える際には仕様を元にすると思うから 「GC時(正確にはメモリの解放時)にはメモリの 0 クリアは期待しない/できない」と理解してよさそうな気がする。 >>895 の「GCで大量にゼロクリアが必要にはならない」が「GC時に 0 クリアしている訳ではない」との意味であれば 仕様としては正しいことから一般論としても正しい。 ただ、実際にはやってくれているけど、それは仕様に基づいているわけではないからいつ改変されるか分からないアテには出来ないもの、と理解しました。 自分もよくやるんですけどね。仕様にはないけど自分が考える安全のための後始末とか。
954 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 20:52:22.64 ID:3ec5aaGF.net] 勝手に0クリアしてもいいけどGCはそれがわからないから またGCが0クリアするよ つまり二度手間 高速化なんてのたまてってるけど馬鹿ばっか
955 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 20:53:23.50 ID:3ec5aaGF.net] 無能の馬鹿の議論は飽きたわ どこか別でやってくれよ 個人のブログとか
956 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 20:55:58.52 ID:dr2cdwts.net] 正直議論に見えない、自演に見えてきた。
957 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 21:04:46.71 ID:wSkKKBMW.net] >>912 もともとのガベコレの意味はざっくり言えば「確保/解放によって断片化したメモリのデフラグ」 だったはず 知らんけど
958 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 21:22:51.36 ID:0ImhO/qF.net] >>912 GCは「アイドル時にやれ」というのは分かるよな? 実際はとりあえずこれを目指しているはず。 メモリ確保時にゼロ初期化するのはユーザ時間に直接影響する。 (メモリ確保のレイテンシが著しく増大する) GC時に初期化するのはGC時間が長くなる。 CLRの場合は確かGC時にはユーザスレッドを凍結していたはずだから、 これもユーザに見えることになる。 だから、普通に考えて、 一旦GCした後、(ユーザスレッドと並行可能な)別スレッドでゼロ初期化だよ。
959 名前:デフォルトの名無しさん mailto:sage [2017/04/16(日) 23:10:52.0
] [ここ壊れてます]
960 名前:0 ID:rt4ZW9V3.net mailto: 基本型の配列は0クリアされるのは仕様で決まっとる どこのどいつが実際にやろうが関係ないだろ [] [ここ壊れてます]
961 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 21:40:45.89 ID:3B2OvgTj.net] でも初期化するクセは付けた方がいいぞ プログラマとして そういう意味でゼロクリアされている事がわかっていても 明示的にやっておくのも間違いじゃない
962 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 21:53:33.58 ID:DRWzf9HM.net] いいぞ 誰に向かって威張ってるのかね そんな威張っていうような話か?w
963 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 21:59:35.59 ID:FPOa41qy.net] 一週間も馬鹿な話続けてる奴にそんな嫌み通じるかよ お前も馬鹿か
964 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 22:28:28.26 ID:0+0M+jw7.net] じゃぁ配列は、こう初期化すんの? byte[] buff = (byte[])Enumerable.Empty<byte>();
965 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 22:37:56.61 ID:sNToWnIL.net] 自分のブログでヤレ
966 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 22:40:07.22 ID:sNToWnIL.net] わかってないようだから書くけど こいつがまず重度の馬鹿 >>919
967 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 23:18:50.28 ID:pEHnUlca.net] 924 はキチガイの類
968 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 23:22:01.64 ID:pEHnUlca.net] これがキチガイの末路w これこそが本物だ www.int2.info/news1.htm
969 名前:デフォルトの名無しさん mailto:sage [2017/04/17(月) 23:38:40.81 ID:YebzKHR/.net] ここまで基地外だけ
970 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 00:27:01.11 ID:0Yq9p2Hl.net] >>926 Microsoft相手に訴訟すると こういう目に会うのか
971 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 00:36:27.92 ID:gic2i7xr.net] んな訳ねぇだろ、てかお前本人だなw そんな予感はしてたんだ、文体似てるし60代臭していたし Delphi板荒らしていたヤツとよく似てたし、お前Delphiやってたし もうじき親の財産次るんだろ?もう終わりだろ、はよ死ね
972 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 01:34:33.30 ID:4m6dsFPX.net] client sideのvalidationがめんどくさすぎるのだけどVMからvalidator.jsを生成するサービスないのか?
973 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 06:15:21.44 ID:dwhcaFAX.net] それは頭悪いだろ サーバーサイドでやってるバリデーションと同じことがしたいならAPI作ってajaxが筋
974 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 06:39:33.82 ID:RUjuZHo6.net] そのAPIとそれを使ったクライアントコードの生成サービスないかってことでしょ
975 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 07:40:17.90 ID:4m6dsFPX.net] >>931 不要な通信を避けるためにclient side validationするわけでしょ そのために通信をしてたら意味ないじゃん
976 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 07:51:25.03 ID:Su4pCCia.net] あるわけねえだろ夢見んな
977 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 18:30:31.09 ID:dwhcaFAX.net] >>933 client side validationの目的は一般的には通信を避けることではなくフィードバックの即時化によるUXの改善でしょ よほどレイテンシの大きい糞NWを想定してるとか、サーバーに頻繁にリクエストが来るのがキャパシティ的に許容できないとかでない限りは ajaxによるバリデーションは十分有効
978 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 18:34:28.24 ID:b4tf0yLR.net] クライアントにidとパスハッシュのリスト送信しておけばおk
979 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 19:24:13.68 ID:T0vdTXyx.net] >>935 なるほど でもその説明じゃうちのロートル達が納得しないよ もっと素人が喜びそうな説明はできないの?
980 名前:デフォルトの名無しさん mailto:sage [2017/04/18(火) 19:34:36.94 ID:qpdySibv.net] 死ね
981 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 14:46:51.02 ID:ofUg/eB0.net] EntityFramework で System.Data.SQLite 使ってるんだけど、 SaveChanges() が遅すぎるので、 CQRS( ttps://msdn.microsoft.com/magazine/
982 名前:mt788619 )をやってみようと思った クエリ用にデータベースファースト、コマンド用にコードファーストで DbContext を作ってみたんだけど、モデルファーストの DbContext を new すると コマンド用の POCO と競合して曖昧と言われる まだ試してないけど解決方法がなんか汚い ttp://entityframework.codeplex.com/workitem/483 クエリ用、コマンド用ともにコードファーストにするのが普通なんだろうか? SQLite はマイグレーションサポートしてないようなのでコードファーストはメジャーじゃない? [] [ここ壊れてます]
983 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 18:34:56.61 ID:9NLTwIyk.net] >>939 DBからコードファーストじゃだめなん?
984 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 19:09:00.01 ID:ofUg/eB0.net] >>940 そうね データベース(モデル)ファーストにしてるのは、 ER図を見るために使ってるだけだからそれでもいいかぁ クエリ用(Read)とコマンド用(Write)双方ともDBからコードファーストで作って DB変更時には再度作り直す方法でやってみるかなー (どこらへんがコードファースト? って使い方になっちゃうなw)
985 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 00:34:55.91 ID:IVDQeFzJ.net] 毎回迷うんだけど VS2017ではどのデータベースを使うべき? そしてEFはどのバージョンを使うことになって参考になるサイトはどこにあるんだ? それそろ安定してほしいんだけど
986 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 01:26:41.50 ID:72Ff37pO.net] >>942 MSDN: Introduction to Entity Framework ttps://msdn.microsoft.com/en-us/library/aa937723(v=vs.113).aspx 上記ページは、なんか日本語表示にはできるけどインデックスやら、 ページのリンクが英語になってたりして、チグハグ 和書では、EFについて書かれた本がほとんどない 書いてあっても一章分でさらっと流す程度だし、 ネット上の情報だと EF を使うための VisualStudio の操作方法とか、 いくつかの落とし穴の回避方法がパラパラ載ってる程度なので、 英語の MSDN をブラウザの翻訳機能で読んだほうがいいと思う EF Core (EF7として開発されてたらしい) ではクロスプラットフォームの ための軽量化で一部の機能を削いでるらしい(モデルファーストとかはできなくなる) EF6 は EF Core が出てからもしばらくはサポートされるので、 今入門するなら EF6 を使うのがいいと思う (というか、必要でない限り移行はお勧めされていない)
987 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 06:35:38.36 ID:h0UgT1Ml.net] EFはWeb系のノリで作られてるから安定することはないよ
988 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 07:48:39.88 ID:XjCRa8hg.net] 業務とデータベースに精通していて 全てを自由に弄れる立場にいて 時間をかけて生成されるデータ構造まで意識した精緻なモデル設計ができて その案件の寿命までずっと面倒をみれるか同レベルの後継者を育てられる そんな人がチームにいればモデルファーストは有りじゃないかな そうでなければ使い捨てアプリぐらいにしか使えないよ
989 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 08:13:05.97 ID:dQDWETdW.net] >Web系のノリ どういうこと?
990 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 08:17:36.55 ID:lbMf26rv.net] >>942 安定って具体的に何のことを言ってんの?とっくに枯れた技術だけど
991 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 09:12:06.55 ID:LWRI+6r2.net] >>946 ヤマトのりかと
992 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 11:08:44.37 ID:U4JkC8YI.net] EFとLinqのせいで生のSQL文が書けなくなっている。
993 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 11:45:09.91 ID:72Ff37pO.net] まだサポートが十分でないDBとかあるし、ガンガン開発されてるのに枯れた
994 名前:とか言っちゃうんだ Web系の人なんだろうなー ttps://docs.microsoft.com/en-us/ef/efcore-and-ef6/features EF1 2008/8 バージョン4.0までは ObjectContext を使ったプログラミング、データベースファースト EF4.0 2010/4 セカンドリリース、POCOサポート、モデルファーストサポート EF4.1 2011/4 DbContext が導入される、コードファーストサポート、NuGet配布 EF4.3.1 2012/2 マイグレーションのサポート EF5.0 2012/8 .NET4.5 が対象、enum EF6.0 2013/10 オープンソース化、async対応、細かな改善多数 EF6.1 2014/3 DBからコードファーストするウィザード EF6.1.3 2015/3 EF6系の最新(EF6.2 が出る?) EF Core 1.0(EF7) 2016/6 コードベースが新たになる、ObjectContext 非推奨 EF Core 1.1 EF Core 2.0 2017/Q3予定 準備中 GitHub のフォルダ構成見て初めて気づいたんだけど、 EF ってASP.NET の1モジュール扱いなんだな 964 の言ってるWeb系のノリ、納得 [] [ここ壊れてます]
995 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 11:56:05.07 ID:8CN2PrPc.net] 開発されてないのが枯れてるのか。そりゃ確かに枯れてるなww
996 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 12:40:19.25 ID:dpyapAzz.net] >>946 あくまでもイメージだが品質とか安定性より開発速度とかリリースを優先するって感じ >>947 腐ったまま枯れてるってことはいくらでもあるし
997 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 17:42:09.62 ID:MpBIOwvX.net] そういえば前から疑問なんだけど、フォームのイベント伝搬ってどう組むべきなんだ? 状況としてはよくある波形ビューワーで、表示先頭位置と倍率が変えられて、 カーソルが2つあって、フィットボタンを押すと画面にフィットするもの。 (カーソル0が画面の左端、カーソル1が画面の右端になるように、 自動的に表示先頭位置と倍率が調整され、再描画される) (A) 表示先頭位置の変更→画面再描画 (B) 倍率の変更→画面再描画 とした場合、 フィットボタンを押す→ 表示先頭位置と倍率が自動的に変更される=普通は上記(A)または(B)に当たる →自動的に再描画される となるのだが、ほとんどのケースで2回描画されてしまう。 そこで今は、倍率変更側はフォーカスを確認して (B') 倍率の変更→(フォーカスがある時のみ)→画面再描画 として1回描画にしているが、 これだとフィットボタンを押したとき、結果的に倍率のみの変更の場合は再描画されない (同じ値を上書きしてもChangedが発火しない)ので、フィットボタンのイベントの最後に if (!changed_start_pos) redraw(); を付けている。 ただしこれはリファクタ時に久々に見たら「はて?」と思ってしまった。 この場合って、どう組むべきなんだ? ちなみにJavaScriptの場合は、プログラムによる変更の場合はイベントが発火しないので、 全てのイベントの最後に redraw(); が必要になるが、全部書けば全く問題ない。 フォームの場合はプログラムによる変更でもイベントが発火するので、この問題が起きる。 ただ、特にレアケースでもないし、一般的なうまいやり方があるとは思うのだけど。 上手く繋げられれば記述が少なくて済むからこの仕様なんだろうし。
998 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 17:42:43.14 ID:MpBIOwvX.net] なお、今のコードのイメージは以下。(CLIだけど) void numericUpDown_fitButton_Clicked(Object^ sender, EventArgs^ e) { // フィットボタンクリック // 倍率と表示先頭位置の再計算 numericUpDown_magnitude->Value = XXXX; numericUpDown_startPos->Value = YYYY; if (!changed_start_pos) redraw(); } void numericUpDown_magnitude_ValueChanged(Object^ sender, EventArgs^ e){ // 倍率変更 // スクロールバー等の増減量等、他機能の整備もここでやっている if (((NumericUpDown^)sender)->Focused) redraw(); } void numericUpDown_startPos_ValueChanged(Object^ sender, EventArgs^ e){ // 表示先頭位置変更 redraw(); } void redraw(); // 再描画 ぱっと思いつくのは全部 Focused を確認して redraw() だが、 それだとこの仕様(=フォームのイベントはプログラムによっても発火する)にした意味無いよね? (その場合は明らかにJavaScriptの仕様の方がマシって事になってしまう) 多分何らかの上手いやり方があると思うのだが。 色々奇妙なのは後付でごちゃごちゃやっているから勘弁で。 今までは問題なく動作していたから放置していたが、ついでなのでリファクタしようとしている。
999 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 18:12:04.32 ID:FFGpioc0.net] >>953-954 そもそもコントロールのイベントで再描画ってのはちょっとw 表示先頭位置とか表示倍率とかの値はFormなりUseControlなり 独立したクラスなりのプロパティになってるはずで、それらのプロパティの変更痔に 再描画されるようにしないと 無駄な再描画を避ける方法だけど、一番いいのは余程重いのでなければ 気にしないことだと思うw どうしてもこだわるなら、直接再描画するんじゃなくて タイマーのイベントに再描画を紐づけしてタイマーをスタートさせるだけにするか、 Application.Idleイベントをうまく使うかするとか
1000 名前:あ mailto:sage [2017/04/21(金) 18:18:11.06 ID:KFYgHFHL.net] >>953 リドローが必要だとキューイングするかと。 どうせインプットのリフレッシュレートやら画面のリフレッシュレート越えてリフレッシュしても無駄なんだし、リフレッシュ時には再描画するんだし。 WindowsならWM_PAINTでやるとかが歴史的にいわゆる普通の方法では?
1001 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 18:23:10.98 ID:YZVNImgq.net] >>950 EntityFrameworkとEntityFramework Coreを同一視してるおバカさん
1002 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 18:35:37.53 ID:RSu3z+zM.net] フォームのように、SuspendLayout, ResumeLayoutみたいな設計もあるけどね
1003 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 18:51:51.53 ID:xzjZrHPt.net] イベント毎にRedraw要求を行うのではなく、 イベント毎にRedrawイベントをどこかのキューにぶち込んで、タイマーや別スレッドで監視し、 描画時に複数のRedrawイベントがあれば最新の物を一度で済ませるようにすればいい。
1004 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 18:55:13.11 ID:MpBIOwvX.net] >>955 別クラスのプロパティに分離しても本質的には同じだよね? 複数のプロパティが、 ・どれかは変更される ・全てが変更されるとは限らない ・必ず変更される物があるわけではない 状況においては、内部的にOR取ることが必要で、一番単純なのはキューで上書きしてしまう方法。 つまりそちらのようにタイマーに要求を出して、 timer->start()は何度打っても同じだからそこでOR取ってしまうとか。 しかしこれだと余分にこの構造が必要なんだよね。 (ただし他の部分ではこの方法も使っている) UIから変更された場合、60fpsとかにするくらいなら直接イベントで描画してもほぼ同じでしょ。 波形はwaveファイルで数百メガとかの場合もあり、このときは明らかにもたつくので2度描画はNG。 あるいは、独立クラスにフラグを持ってそこで上書き、 独立クラスのeventをサブスクライブしろ、ということ? それは理想的な構造なのだろうけど、話が膨らみすぎて面倒だ。 Application.Idleは初耳だが素晴らしい。(JavaScriptではアイドルが取れない) これってUIスレッドが、ってことで良いのか? (ただしこれは今回は使えそうにはないが) >>956 WM_PAINT見たがよく分からん。 システム側が再描画タイミング(おそらく60fps)を通知してくれるので、 それをサブスクライブして、そこで溜まっている
1005 名前:再描画を掃くのか? それはゲームみたいに常に再描画する用で、 今回みたいにUIで変更された時のみの場合は常にイベントが呼ばれる分ウザくなる気が。 あるいは、自分で何かを再描画した時だけ、 システム側で60fps同期でWM_PAINTを打ってくるのなら、今回には使えない。 [] [ここ壊れてます]
1006 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 18:57:50.94 ID:MpBIOwvX.net] >>959 サンクス。まあみんな意見は同じか。 他に何か、「プログラムによる変更であってもイベントが発火する」という、 フォームの仕様を上手く使った方法はないかねえ?
1007 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 19:08:46.15 ID:xzjZrHPt.net] >>961 >>958 みたいな感じじゃないか。 WindowsのListViewとかも、大量のデータ挿入を想定してBeginUpdate/EndUpdateと言った手段を用意しているし、一般的な手法かと。
1008 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 19:19:20.39 ID:72Ff37pO.net] >>957 違いを比較しているURL貼ってるのにレスを読みもしないで小馬鹿にする馬鹿 >>953 瑣末なことで悪いんだけど、どうしても気持ちがざわつくので指摘する 「リファクタする」は日本語としてあまり使われていない refactor の訳としては「リファクタリングする」が使われている印象 どう間違っているのかはうまく説明できん refactoring は造語で、それを元に refactor という動詞が造語として作られている 一般的な動詞ではないので注意
1009 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 19:50:01.08 ID:MpBIOwvX.net] >>962 BeginUpdate/EndUpdateはいいとして、 SuspendLayout, ResumeLayoutは反応しなくないか? (というか>>958 は俺宛ではなくEFの件なのか?と思っていた) 俺の理解ではSuspendLayoutはレイアウト時、つまり、Control.AddRangeを止めるもので、 Graphics.DrawLinesとかを止めるものではないと思っているのだが。 >>963 了解。
1010 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 19:56:01.47 ID:FFGpioc0.net] >>960 コントロールのイベント使うな、っていうのは無駄な再描画対策じゃなくて設計論ね そういう設計だと、例えばプログラムで倍率を変更しても再描画されないよね。 まあ余計なお世話だよねw Application.Idleは例えばこうやって使う bool DrawOnIdle {get; set;} void Application_Idle(object sender, EventArgs e} { if (DrawOnIdle) redraw(); DrawOnIdle = false; }
1011 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 20:10:34.38 ID:Cei54Lla.net] VS2017でどのデータベースとEFを使うべきか質問したものです レスありがとう 完全に浦島太郎状態でした こんなことになってるとは思っても見ませんでした .net.core の方の知識もなくてググってみたらマニュフェストらしき設定ファイルが xmlからjsonになってるんですね...
1012 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 20:16:45.24 ID:TbfEGS8v.net] MSに関わると2,3年であっという間に浦島になるからな
1013 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 20:28:06.75 ID:MpBIOwvX.net] >>965 ちょっと話が噛み合って無い感があるから整理すると、 JavaScript: プログラムからの変更ではイベントが発火しないから、 全てのイベントハンドラは redraw(); で締めないといけないが、 イベントハンドラ内で他コントロールをどれだけ触ろうと何も考える必要なし。 .NET: プログラムからの変更でもイベントが発火するから、 関連しているコントロールのイベント先をすべて redraw() にしておけば再描画される。 だから単純な再描画についてはこっちの方が記述はすっきりする。 ただし、今回のように複数コントロールを触るイベントハンドラがあった場合、 その回数だけ再描画される可能性がでてくるからそこを対策しようとすると、途端に汚くなる。 (JavaScriptのコードは redraw(); を書くしかないし、再描画だとはっきり分かるが、 .NET のコードは俺が今やっている妙な対策法だと???なコードになる) 再描画されればいいのなら、.NETの方が良いけど、 2度描画禁止とかにしたい場合、.NETの方が記述が余計に必要になる。←これって俺の勘違いか? というのが今回の疑問。 > そういう設計だと、例えばプログラムで倍率を変更しても再描画されないよね。 違う。プログラムから各
1014 名前:コントロールのValueを変更することによって、自動的に再描画させてる。 というか、波形表示画面内容と表示開始位置と倍率は当然同期してないといけなくて、 逆に、表示開始位置と倍率が変わらないのなら再描画の必要がない。 それはコントロールの値を変更する構造によって自動的に達成される。 (.NETは同じValueを上書きしてもイベントが発火しない為) だからFitボタン連打とかの場合の無駄な再描画はここで止められる。 多分.NETの仕様だとこういう事だと思うんだよ。(これがMVC的に云々というのはまた別の話) それで、2度描画禁止の場合はどう実装するべきだという想定なのだろう?という疑問なんだ。 普通はキューイングするから問題ない、ってことなのかな? (なお、明示的に再描画したい場合は redraw() を呼ぶだけだから問題ない) [] [ここ壊れてます]
1015 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 20:42:28.79 ID:MpBIOwvX.net] ちなみにMVCの場合はモデルがイベントソースで、 コントロールの値を変更→モデルの値を変更→再描画 という流れになるけど、モデルの値をプログラムから変更する場合、 コントロールの値の表示を手動で合わせてやる必要がでてくる。 これが面倒だから、WPFではバインディングってことで自動化してる。 これはこれで良いとして、 .NET作った時に今回のようなケースが想定されていないはずもなく、 彼等の想定実装があるはずで、 その通り実装すれば綺麗に実装出来るはずなんだが、というのが俺の疑問。
1016 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 20:43:34.30 ID:FFGpioc0.net] >>968 勘違いではないよね。 その認識であってると思う。 コントロールのプロパティを値の入れ物として利用するのは普通はよくない作法だと思う。 コントロールはあくまでUI(表示と入力)に徹するべきで、 表示先頭位置とか表示倍率とかの値はFormなりUseControlなり 独立したクラスなりのプロパティにするべきだというか、普通はすると思う。 で、再描画はコントロールのプロパティが変更されたタイミングではなく、 表示先頭位置なり表示倍率なりのプロパティが変更されたタイミングで行う。 当然、この場合も一度に複数のプロパティが変更されたときに 不要な再描画を回避する方法は考える必要がある
1017 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:04:34.72 ID:rPWpf+kQ.net] n秒に1回描画フラグを監視する仕組みのが楽だなw コントロールの挙動全部把握してるやつが触らないとぶっ壊れるって モノ作ってんだろ? それって設計悪くない?
1018 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:07:01.51 ID:MpBIOwvX.net] >>970 > コントロールのプロパティを値の入れ物として利用するのは普通はよくない作法だと思う。 MVC的にはそうだね。ただ、この部分のUIなんて変更はないからどっちでもいいのも事実。 ところでその場合、バインディングはどう実現する? (C) numericUpDownのValueChanged→モデルの値を変更 これはいい。ただFormの場合、 (D) モデルの値が変更された→イベント発火でnumericUpDownの表示値を変更 とすると、当然(D)の直後に(C)が発火して、 モデルの値を再度「同じ値」で上書きして、そこでイベントが止まる。 これって全くの無駄でしょ。 .NETの仕様を決めた時、これらが想定されていないはずもなく、 彼等なりの上手い使い方があったと思うんだよね。 (今現在それが良いとされる手法かどうかはともかく) 今のところ、表示とモデルの内容を同期するのに一番簡単な方法は、 「numericUpDownのValueをモデルの値として扱うこと」なんだよ。 そしてこれだと他クラスから見えないので、コピーを持ってる。 これは後付でこうなった、というのもある。 実装は、イベントハンドラに何個でも関連づけさせられるからそこでさせてる。
1019 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:13:36.92 ID:MpBIOwvX.net] >>971 モデルをどこに置くか、という話なんだよ。 Formの仕様だと、numericUpDownのValueプロパティを「モデルの値」として扱えば すべてすっきり行く仕様になってる。だからそうしてる。 ところが2度描画禁止だとすっきり行かない。だからこれが疑問。 それならJavaScriptみたいに、最初から 「必ず1回redraw()を書かないとダメだけど、1回書けばいいだけです」の方が良かった。 だから、彼等なりの想定実装があったはずで、それを考えてる。
1020 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:15:27.48 ID:rPWpf+kQ.net] 使って問題がある場面のバインディングなんて使わなきゃいーじゃん マイクロソフトお作法病って損だと思う
1021 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:15:53.73 ID:Re4upQlq.net] >>963 EntityFrameworkはもう十分枯れてるだろバカ Coreは確かに発展途上だけどね 元のレスを読まないからこんな的はずれなURLを貼っちゃう
1022 名前: [] [ここ壊れてます]
1023 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:18:21.74 ID:lnct7jOB.net] イベントがダブりそうなときはイベントを-して値代入後+しなおしているなあ >>970 の2段落目に賛成だな 見なおしたり他に移植するときにそっちの方が分かりやすいし
1024 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:33:34.84 ID:MpBIOwvX.net] >>974 バインディングといったから分かりにくいが、放置した場合は表示が間違ってるんだよ。 これは完全にアウト。 Fitボタンが押された→ モデルの値が変更された→ 再描画された これで「波形表示」は最新になるけど、 「表示開始位置」と「倍率」の表示されている値が古いままでしょ。 そしてFormのイベントはそれ用になってないんだよ。 >>976 > イベントがダブりそうなときはイベントを-して値代入後+しなおしているなあ これってかなり面倒でしょ。 今のところタイマで遅らせるのが一番すっきりするからそうしようかと思っている。 (これは他部分で既に実装済みなのを流用出来るというのが大きいが) redraw()を呼んだら16ms後にredraw_implement()が呼ばれて実際に再描画とか。 ただこんなの.NET作った頃から想定してたのかな?という疑問はある。
1025 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:34:54.35 ID:h0UgT1Ml.net] >>966 来年にはYAMLになってると思うよ
1026 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:37:01.31 ID:72Ff37pO.net] >>975 なんだ、枯れてるとか言ってボコボコ叩かれて悔しかった奴か 「Coreは確かに発展途上だけどね」 Core の前になんかつくだろカス
1027 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 21:49:04.78 ID:rPWpf+kQ.net] >>977 意味わからん 画面は自分が必要なときにデータを見て勝手に描画するじゃん フォームはコントロールの操作によってデータを書き換えるじゃん バインディングなんて使わなきゃ悩む要素皆無だったんでしょ?
1028 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 22:08:05.95 ID:Re4upQlq.net] >>979 おや、ようやくCoreを認識できたんだね
1029 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 22:08:53.85 ID:1MuUAA6h.net] >>979 自分が叩かれていることに気づいていないのは見苦しい
1030 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 22:09:14.20 ID:k73pGP5K.net] >>977 そのへんはレンダリングスレッドがUIスレッドと分かれてるWPFでやろうとしてたと思われ。
1031 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 22:29:56.50 ID:MpBIOwvX.net] >>983 え?WFPって描画はUIスレッドじゃなくていいのか? それはすごくいい。 それだとスピンコントロールのボタン連打で描画が追いつかない時にも、 イベントが溜まることなく最新が常に表示されるね。 何もしなくても。 まあ何だかんだで新しい物は改良されてるってことだね。
1032 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 22:29:56.87 ID:Cei54Lla.net] かずきが日本マイクロソフトに入社してる! 本当に浦島状態
1033 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 22:34:32.90 ID:baDy0zQG.net] >>985 誰だよ?
1034 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 22:37:38.47 ID:k73pGP5K.net] >>984 描画はUIスレッドなのは変わらない。 UIスレッドで同じところにポンポン書き込んでも適当に間引かれる。
1035 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 22:37:41.43 ID:h0UgT1Ml.net] >>984 クソ重いから結果的にはWinFormsの方が遥かにレスポンス早いんだけどね
1036 名前:デフォルトの名無しさん mailto:sage [2017/04/21(金) 23:07:08.58 ID:MpBIOwvX.net] >>987-988 うーむ、やはりイマイチか。 回答くれた皆さんありがとう。 俺は>>970 ではないけど、次スレ俺が立ててもいいけど。(>>1 )
1037 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 01:19:50.97 ID:Af8PazvW.net] >>954 なんか無茶苦茶だな。 クリックイベントの最中に描画処理を実行してるのか? 再描画させたいならInvalidateRectとかでWM_PAINTを発生させてそこでまとめて描画するのが作法だぞ
1038 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 03:39:27.34 ID:BJdj4TZ/.net] >>990 御説ごもっともだけど、そんな偉そうに言うほどのことでもないよ
1039 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 04:54:36.82 ID:y5zvwDCw.net] 偉そうかどうかは関係なくない?w
1040 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 06:10:42.01 ID:4+2xx2Ut.net] >>992 発言の正当性より自己満足度で正当性を確保しているので重要です
1041 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 06:23:09.19 ID:9wvnPEyC.net] >>990 InvalidateRect発生させてもRect無視して全画面更新しちゃうよ。ふざけんな! みたいな話だからな。ちょっと方向性が違うw
1042 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 06:45:50.45 ID:+hjaOcO8.net] >>991 2ch初めてか? w
1043 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 08:50:41.11 ID:iVvswOrb.net] 次スレ立ててくる
1044 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 08:52:51.85 ID:iVvswOrb.net] 次 C#, C♯, C#相談室 Part93 echo.2ch.net/test/read.cgi/tech/1492818720/
1045 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 09:05:33.60 ID:/oxuzvQq.net] ワッチョイなしで立て直して
1046 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 09:09:40.54 ID:AhKt2WIP.net] やなこった
1047 名前:デフォルトの名無しさん mailto:sage [2017/04/22(土) 13:34:52.68 ID:3nsKygnV.net] 1000
1048 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています