- 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が建てる事。 建てられない場合は他を指定する事。
- 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年であっという間に浦島になるからな
|

|