1 名前:デフォルトの名無しさん mailto:sage [2015/07/25(土) 16:14:05.15 ID:I42JqLkf.net] ■Visual Studio 2013 Community & Express(無償の統合開発環境)等はこちら www.visualstudio.com/downloads/ ■コードを貼る場合はこちら ideone.com/ ■前スレ C#, C♯, C#相談室 Part87 [転載禁止](c)2ch.net peace.2ch.net/test/read.cgi/tech/1427558696/ ■次スレは>>970 が建てる事。 建てられない場合は他を指定する事。
558 名前:デフォルトの名無しさん mailto:sage [2015/08/22(土) 16:56:24.11 ID:/dRiP8l8.net] そんなの一カ所だけじゃなくて複数箇所見て比較すれば済む話なんじゃ。。 多少問題があっても有効な情報も多数あるサイトならあった方が便利だと思うんだけど。
559 名前:デフォルトの名無しさん mailto:sage [2015/08/22(土) 17:07:23.50 ID:/ddVcb/Z.net] >>547 NAudio.XMLがついていましたがどのような形式で書いてあるのかが分かりません
560 名前:デフォルトの名無しさん mailto:sage [2015/08/22(土) 17:15:56.97 ID:+n0G/6wG.net] xml形式だよ
561 名前:デフォルトの名無しさん mailto:sage [2015/08/22(土) 17:37:51.84 ID:KIpdc5GT.net] >>549 1.1〜2.0の頃のネタばかりだから昔はお世話になったけど、今は検索でヒットしてもスルーしちゃうわ
562 名前:デフォルトの名無しさん mailto:sage [2015/08/22(土) 17:51:26.44 ID:JpeLxAWc.net] ドボンってIDisposableなオブジェクトでも基本usingしないというありえないコードばかりなので
563 名前:デフォルトの名無しさん mailto:sage [2015/08/22(土) 18:00:11.86 ID:sBJvd1d/.net] >>554 そりゃそのまま使っちゃだめだよ
564 名前:デフォルトの名無しさん mailto:sage [2015/08/22(土) 18:09:11.16 ID:TF79Y1M/.net] >>554 前も書いたけどあそこはそこまで酷いコードはない。
565 名前:デフォルトの名無しさん mailto:sage [2015/08/22(土) 18:18:17.85 ID:TF79Y1M/.net] っていうか、ちゃんと記事読んだことがあれば、あそこの管理人がそんな馬鹿じゃないことぐらいは 分かると思うんだけど。 2chって何かを貶めることで自分が一人前だと錯覚したがってるとしか思えない馬鹿多いけど痛々しいよ。
566 名前:デフォルトの名無しさん mailto:sage [2015/08/22(土) 18:25:43.07 ID:zOssAmca.net] >>544 >>536 に対して >>538 で、そういったリファレンスならMSDNだろ的な指摘して >>539 はサンプル的なサイト見てんじゃないかと言っただけだろうと思う。 ドボンが悪いとかは書いてない。
567 名前:デフォルトの名無しさん mailto:sage [2015/08/22(土) 18:27:46.34 ID:yRr1oZWk.net] msdn.microsoft.comのAPIリファレンスとリフレクタ(今はILSpy)だけで すべてやりくりしてきた俺、ドボンを知らず低見の見物
568 名前:デフォルトの名無しさん mailto:sage [2015/08/22(土) 18:34:01.47 ID:/al9OGnB.net] >>557 後半 あるあるある
569 名前:デフォルトの名無しさん mailto:sage [2015/08/22(土) 20:23:16.96 ID:JpeLxAWc.net] >>557 いや、当人がどんな人物であったかとは関係なく、 あのコードを垂れ流しているというのは犯罪に近いよ。 分かってる人にはいいけど、初心者にはあまりいい影響を与えない。 何かを公開して流布している責任というものがある
570 名前:デフォルトの名無しさん mailto:sage [2015/08/22(土) 20:41:11.99 ID:9JN1kuOn.net] 言論の自由があるので仕方ない
571 名前:デフォルトの名無しさん mailto:sage [2015/08/22(土) 21:22:44.29 ID:/dRiP8l8.net] そもそもネットの記事を鵜呑みにするヤツの方に問題があるんでわ。
572 名前:デフォルトの名無しさん mailto:sage [2015/08/22(土) 21:28:50.69 ID:Z73ESiAy.net] >>561 わかる でもそれは仕方ない 「にわかな奴ほど語りたがる」の法則は今だ根強い 糞かどうかの判断がつかないから顔面に糞つけて糞頬張りながら糞うpするんだよ
573 名前:デフォルトの名無しさん mailto:sage [2015/08/22(土) 21:35:41.70 ID:3HC4qH6u.net] >>561 具体的にどれよ url 教えてくれ
574 名前:デフォルトの名無しさん mailto:sage [2015/08/22(土) 22:46:49.90 ID:FpzfkEmP.net] >>559 .NETのソースならよく読むけど、逆コンパイルするほど気になるソフトってなんかある?
575 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 01:33:58.42 ID:kX8AQ+CF.net] >>561 犯罪的なコードって何でしょう?
576 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 03:28:16.91 ID:AQ6+ZwTX.net] >>554 あそこはVB.NETがメインで、Usingが使えるようになる前からのコードがあるからだよ Disposeしろって注意書きは時々みかけるし、そもそもあそこ初心者のためのサイトじゃないと思うが
577 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 10:55:36.67 ID:BEYfXVp0.net] Dispose厨のレベルの低さに泣ける 何でもかんでも明示的に破棄するのはアホのやる事だぞ マネージドって言葉の意味少しは考えろよ
578 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 11:11:07.80 ID:U8H/JFYc.net] Dispose厨ってのは MSDNも読まずにマネージドリソースの解放にDisposeを使っちゃう アホなクラス設計者のことですよね?
579 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 11:15:15.60 ID:QlQ/u5s/.net] 人を非難する前にマネージドリソースとは何か明確に定義せよ
580 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 11:15:48.70 ID:CLEYS0FF.net] >>569 どゆこと? >>570 >マネージドリソースの解放に それはGCがやるもんだが
581 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 11:49:28.77 ID:BEYfXVp0.net] クリティカルなリソースはusingを使うべきだ パフォーマンス問題になるならusingを使っても良い しかしそれ以外ではusingを使うな CLRに全てを委ねてプログラマをリソース管理の責務から解き放つのだ
582 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 12:05:44.69 ID:9aqT3FI6.net] メモリ以外のリソースはすべて・・・・
583 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 12:17:42.22 ID:CLEYS0FF.net] >>573 全く分からん
584 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 13:15:02.38 ID:JQjk+2hP.net] マネージドリソース それは(ライブラリの中のコード含めて)ネイティブを使わずに記述できるもの ファイルやTCPソケットはこれに該当しない クリティカルとか言ってる馬鹿は放置
585 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 13:20:50.40 ID:9aqT3FI6.net] メインメモリ以外のリソースはすべてアンマネージドだ
586 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 13:22:15.46 ID:prCrabVF.net] usingを使えるってことはIDisposableなわけで、つまりそのオブジェクトがアンマネージドオブジェクトを含んでいたりラップしているのが普通だ IDisposableをやたら使うなならともかく、usingを使うなってのは意味がわからんな
587 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 13:33:23.13 ID:/F5UpcuB.net] ファイルやTCPがマネージドとか言い切ってる奴大丈夫かよ
588 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 13:36:39.19 ID:bbkyb+Wi.net] 8月以降このスレで大丈夫そうな書き込みは見てませんよ ここまで無脳と馬鹿のコラボばっか
589 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 13:43:35.74 ID:zGFxmPuI.net] ちょっと上にあった「ニワカほど語る」法則が炸裂してんだろ。 確かにDisposeだのマネージドだのニワカくせー話題だわ。
590 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 15:33:29.02 ID:JLY6V2Uz.net] 無脳なのは573と579と581ぐらいじゃないか
591 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 15:44:14.12 ID:1KB/gLgO.net] ファイルみたいな共有リソース掴んでない限りGCされるまでメモリを消費するだけだし、Disposeする必要のない場面もあったりする 呼んで損はないから、明らか不要なとき以外は呼ぶが吉だけどね WPF版のドボンみたいなサイトがほしい
592 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 15:54:39.63 ID:Rmxdvxky.net] >Disposeする必要のない場面もあったりする へー、どんな場合だよ ただしawaitのTask以外で
593 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 15:58:35.35 ID:cYtxjCYh.net] WPF(笑) 存在そのものが意味不明なフレームワークは隔離スレで大人しくしてなよ お呼びじゃないから
594 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 16:04:54.83 ID:UzzkwRGD.net] >>584 GDI+関係はかなりあるよ。 Win9x時代はOSの制約上確実に呼ぶ必要があったが今は必ずしも必要ないもの
595 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 16:19:52.74 ID:bbkyb+Wi.net] 頭がとろけたような具体性のかけらもない会話
596 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 16:24:59.06 ID:hc4Y2Ev5.net] 無脳だと認めたら終わってしまうくらい他に何かが無いのに、これ以外にできることが無い奴なんだろうな 暴れすぎやで > 573,579,581
597 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 17:28:44.31 ID:MIhiF6BJ.net] リソースクラスにはDisposeパターンを適切に実装する 実際にDisposeする時期はCLRに任せて人間は管理しない これ.NETの世界じゃ基本中の基本だよ 管理不要でパフォーマンスへの影響もないリソースを工数かけて人間の手で管理したがる 救いようのない馬鹿としか言いようがない
598 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 17:37:04.51 ID:CLEYS0FF.net] はぁ??
599 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 17:43:43.11 ID:MIhiF6BJ.net] >>590 やれやれ 論理的な反論ならまだ救いようがあるが、 無学が原因で理解が及ばない、ってだけでケチを付けるなよ それもう敗北宣言に等しいぞ
600 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 17:48:20.40 ID:0gT6iToJ.net] >>586 kwsk StringFormatとかIDisposableだから律儀にusingしてるけど
601 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 17:50:34.03 ID:0gT6iToJ.net] 起動してすぐ終了するようなツールしか作らないならファイナライザ任せでもいいかもね
602 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 17:54:13.26 ID:hc4Y2Ev5.net] リソースの意味が微妙な感じの流れだから、それは置いとくとして ファイルなどを取り扱う場合はちゃんとDisposeしないとファイルが開きっぱなしになって、他所からアクセス不能になって困る事がある 必ずクローズすれば良いが、例外などで予想外の進行をした場合に備えて using で確実なDisposeをしておいた方が良いだろう 面倒だがDisposeがあるなら必ずDisposeするべきでしょう C++などの場合と比べてファイナライザ(デストラクタ)の実行順序が当てにならないので、あてになる順序をきちんと作る必要がある場合も利用されるでしょうから
603 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 17:57:04.83 ID:bbkyb+Wi.net] あの、ふらっとでやってくれる? そういうの
604 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 18:01:14.22 ID:hrfhzpqC.net] ニワカなやつほど(略
605 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 18:04:40.51 ID:MIhiF6BJ.net] >>594 当然 適切な終了処理が必要なものは、そう書く必要がある しかし、そういった処理が不要で、CLRに任せておけば良いように作られたリソースクラスでは必要がない むしろ不必要な記述でコードを汚染するだけなので、書いてはいけない すでに自動化されているものは、機械に任せるのが正解なのである
606 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 18:04:49.28 ID:hc4Y2Ev5.net] 595,596 煽りたいだけなら、今すぐネット切って死んでしまえば良い
607 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 18:09:32.22 ID:hc4Y2Ev5.net] >>597 Disposeを書くという事は、今後そのライブラリを作った人が そのように使う必要があるよう変更するかもしれないという余地が残っているのです みんなで作業するときトラブルなどが発生しないように取り決めた事ですから、可能な限り従う事がよろしいでしょう
608 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 18:13:39.60 ID:bbkyb+Wi.net] 煽りたくないけど低レベル過ぎて邪魔だよ どっから湧いてるの?
609 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 18:17:14.27 ID:idej2sB9.net] >>600 お前も煽ってるだけで何も貢献してないけどな
610 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 18:17:59.99 ID:GkEjDFKz.net] 俺のDisposable講義は始まったばかりだぜ 聞きたくない奴は帰りな
611 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 18:21:04.69 ID:GkEjDFKz.net] MSDNやそこらのブログに散々書いてあるようなことしか言わないぜ 耳タコだと思うが勘弁な 俺は喋りたいんだ 昨日今日知ったばかりなんでな だから聞いてくれ
612 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 18:23:20.43 ID:MIhiF6BJ.net] >>599 そんな糞みたいな仕様変更をする破壊工作員は処刑が必要 ぶっちゃけコード直してる場合じゃない 最初のバージョンから、Disposeが必須であると、明記されているなら使うべきだし 明記されてい無いなら、Disposeを必須にするような変更は行ってはならない 馬鹿でもわかる話だが知らなかった?
613 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 18:27:38.13 ID:NRN2Fhep.net] お前の頭から修正しとけよ もうリカバリ不能かも知れんがな
614 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 18:34:31.35 ID:MIhiF6BJ.net] ふぅ〜 まいったね 反論すらできないところまで追い詰めちゃったか 論理的な、とまでは言わないから、せめて安い暴言じゃなくて反論を頼むよ
615 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 18:36:25.70 ID:UiYX5d8M.net] そもそもリソースクラスって何だよ
616 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 18:36:31.29 ID:nxY8tWuM.net] ちょっとこのスレDisposeしてくる
617 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 18:41:24.76 ID:bbkyb+Wi.net] Disposeの実装が糞で駄目なパターンだな
618 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 18:41:34.58 ID:UiYX5d8M.net] それに呼ばないのが基本中の基本としつつもIDisposableの代表例
619 名前:であるFileStreamを例外にするってどういう事だよ 長々と書いているが結局呼ばなくていい場合があると言いたいだけか? [] [ここ壊れてます]
620 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 18:44:40.15 ID:JbH8lT1Q.net] MSDN確認してその通りにやればいいだけでは? > 基本クラスが IDisposable を実装する場合は、オブジェクトは基本クラスの Dispose メソッドも呼び出す必要があります。 > Dispose のメソッドを明示的に呼び出す必要があるため Dispose のメソッドを呼び出してオブジェクトのコンシューマーがに失敗したため、 > アンマネージ リソースが解放されないこと危険性が常にあります。 これを回避するには、次の 2 とおりの方法があります。 > ・System.Runtime.InteropServices.SafeHandle から派生されるオブジェクトのマネージ リソースをラップしてください。 > ・Dispose が呼び出されないときにリソースを解放するようにファイナライザーを実装してください。 > StreamWriter などのアンマネージ リソースにアクセスするオブジェクトを使用するときは、using ステートメントでインスタンスを作成することをお勧めします。 > using ステートメントは、使用しているコードが完了すると、ストリームを自動的に閉じ、オブジェクトの Dispose を呼び出します。 > https://msdn.microsoft.com/ja-jp/library/system.idisposable.dispose(v=vs.110).aspx
621 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 18:50:22.66 ID:53h6zSH3.net] CLR再起動
622 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 18:50:45.39 ID:hc4Y2Ev5.net] >>604 それでは共同作業になりませんね、そこまで自我を通したいなら自分一人で作業するしかないでしょう 取り決めは大事
623 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 18:53:42.93 ID:MIhiF6BJ.net] >>613 共同作業を円滑にするために、常にDispose必須、とかいうオレオレルールを排除しなければならない 理由はもう説明したな
624 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 18:59:05.24 ID:53h6zSH3.net] 今度は共同作業のマナー論ですか 君らはまず場を弁えることを学ぶのが先決では…
625 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 19:02:58.05 ID:8rh7GHk2.net] >>592 Font, Brush, Penなんかは自分で作った物(システムリソースじゃない)であっても 今のWindowsではいちいちDisposeしなくてもまず何の問題もない。 そうは言っても習慣で書いちゃうけどね。
626 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 19:09:30.05 ID:2AMvri3n.net] >>616 そうなんだ でも呼ばないと高コストなファイナライザでの解放になっちゃうしね
627 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 19:24:52.17 ID:qzhEyH2V.net] 今unityでゲームを作っているのですが、累計の記録ってどう書けばいいのでしょうか? 今まで対象のオブジェクトが何回タップされたか記録したいです。 playerprefsを使えばできますか?
628 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 19:25:54.56 ID:idej2sB9.net] unityスレで質問しなよ
629 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 19:36:46.47 ID:hc4Y2Ev5.net] Disposeがどうしても嫌なら、勝手に俺ルールを作り出さず素直にファイナライザに書けばいいんだよ そういうルールで作ろうという事になっているんだから それで問題なければそれで上手くいく、そうでないものは決められた極力ルールに従う事 そうしてファイナライザのみにすると具合が悪い話が必ず出てくると気付くはず 例えば、ファイルオブジェクトのように、ロック握っている奴とか 例えば、アンマネージ側の参照カウンタがカウントダウンされなくて予想外のメモリーリークしたとか 例えば、C++のつもりでデストラクトの順序を考えていたら予定外の順序でファイナライザが起動してクラッシュしたとか
630 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 19:44:15.23 ID:0gT6iToJ.net] >>616 システムリソースじゃないってほんとかい? GDIオブジェクトとしてタスクマネージャに表示されるんじゃないの? でも大概描画=なんども呼ばれるシナリオだから そのたびに破棄しておいたほうがメモリ的にも安心じゃね?
631 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 19:45:43.68 ID:MIhiF6BJ.net] >>620 何回言えばいいのかな 呼び出しが必要な必要と使用に明記する 明記されない以上は明記しなくても問題ないように実装する それが社会のルールだ 呼ばないとダメになる場合があるのにそれを仕様に明記しないでDisposeが呼ばれるオレオレルール(出典不明)を前提に作るな クズが死ね
632 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 19:53:17.04 ID:JbH8lT1Q.net] >>616 今更ながらPenがDisposeを実装していると知った。(もちろんDisposeしたことはない) 何でこれまで気づかなかったのかと探せば、 PenのサンプルコードではDisposeしているが、DrawLinesのではしていないからだ。 > https://msdn.microsoft.com/ja-jp/library/system.drawing.pen.dispose(v=vs.110).aspx > https://msdn.microsoft.com/ja-jp/library/7ewkcdb3(v=vs.110).aspx なお、これまで特に問題を感じたことはなかった。 >>617 Finalize自体はDisposeと大して変わらないよね? GC自体のコストと、メモリ撹拌の問題はあるにしても。 Disposeした方がもちろんお行儀がいいとして。 てか、gcnew って delete しなくていいためのものじゃなかったんかー! ファイルはクローズしてるけど、他は全部放置してたわw (なおVC++使い)
633 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 19:58:35.53 ID:nxY8tWuM.net] このスレを読んだら初心者の私もウルトラスーパーハイパーミラクルアルティメットDispose名人になれました!
634 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 20:01:04.88 ID:MIhiF6BJ.net] >>623 deleteしなくても良いであってるよ 自動化したのに手作業が必要なんて馬鹿みたいだろ
635 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 20:08:50.19 ID:9aqT3FI6.net] でも、ファイナライザは論理アドレスが圧迫されてGCが発動しないと呼ばれないよ メモリとシステムリソースは別物だから、 開放のトリガーを論理アドレスの枯渇に頼るのは良くない作法なのでは
636 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 20:09:16.04 ID:hc4Y2Ev5.net] 初心者の頃 Disposeし忘れて、ライブラリの書き直しが大変な事になったのでは GetEnumerator() で取ってきたIEnumerableのDisposeのし忘れかな ファイルオブシェクトをこっそり握っていて、ファイルがロックされたままだったのを 色々システムを結合した後に気づいて、泣きそうになった C++から移行した後、嵌ったのは class A { ~A() {} } class B { A a; ~B() {} } var tmp = new B(); こういったケースかな、C++であれば必ず a のデストラクタが後だが C# だとどちらが先になるか分からなくなる C++と違いデストラクタではメンバは迂闊に触れないという事実を思い知らされた
637 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 20:18:42.77 ID:hc4Y2Ev5.net] おっと、GetEnumerator() で取って来れるのは IEnumerable ではなくて IEnumerator でした Disposeがリソースと関係なく必要になるケースはC++と違いデストラクタがまともに使えないという事情から来ることも多々あります
638 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 20:20:23.58 ID:ZkLCFLWu.net] まだやってやがる 死ねよマジで それともあれか、手伝って欲しいのか? 殺してやるから住所教えろや
639 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 20:26:42.76 ID:0gT6iToJ.net] >>629 おまえの住所先に書けやバカヤロウ
640 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 20:27:29.87 ID:bbkyb+Wi.net] 見なかったことにしてやるからさっさと執行してくれや
641 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 20:31:02.28 ID:MIhiF6BJ.net] おうかかってこいやチキン野郎
642 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 20:50:07.75 ID:JbH8lT1Q.net] >>625 コンセプトとしてはその通りだけど、ID:hc4Y2Ev5が言っているのもまた然りだと思うよ。 本来は、全部GCに任せた上で、理由がある場合のみ手動でDisposeという仕様を目指しているのだと思う。 現実的にはこれはほぼ完成しており、通常の範囲で問題になることはない。(少なくとも俺は命中していない) ただ、MSDNで > 基本クラスが IDisposable を実装する場合は、オブジェクトは基本クラスの Dispose メソッドも呼び出す必要があります。(611) と言っている以上、Finalizerだけでは駄目なケースがあって、それに命中する可能性も残っているのだと思う。 とはいえ、普通に実装すればFinalizeはまずDisposeをコールするだろうから、 問題が発生
643 名前:キるとしたらタイミングだけのはずだけど。 確認してみたけど、C#のデストラクタは起動を予約してGCから起動するという仕様のように見える。 > http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_011/csharp_abc03.html 確かにこれだとFile等はClose/Disposeをしないといつロックを解除してくれるか分からない。 だから>>627-628 の言うことはあっている。620の3つのケースもあり得ると思う。 理由は指摘の通り、C#ではデストラクタの起動順/タイミングが規定できないからだね。 [] [ここ壊れてます]
644 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 20:50:20.22 ID:1KB/gLgO.net] >>584 特定の方法でインスタンス作った時にだけ意味があるというのは割りとある 例えば、FormをShowした時とかは自動でDisposeされるから不要
645 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 21:31:38.21 ID:hc4Y2Ev5.net] >確かにこれだとFile等はClose/Disposeをしないといつロックを解除してくれるか分からない。 ファイルオブジェクト的な物を使う側ではなく作る側で、実際にいろいろやってみて面倒な事になってるなと思ったのは フィールド上に確保していたバッファがデストラクタ中のクローズ処理よりも先に解放されてしまうなどですかね アンマネージの場合はこの辺は実にすっきり記述できるんですが、マネージでは厄介です 初心者の時 ~Class() { Dispose(); } なんて事をあまり深く考えずにやってました、そして謎の異常終了を発生させてましたね Disposeが呼び出されずにデストラクタが呼び出されたら、できることはもはや安全停止だけです まともな終了処理は最早できません
646 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 21:35:34.12 ID:OpHxID+X.net] C++のノリでデストラクターを間違った使い方して GCの洗礼を受けたのはわかった
647 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 21:37:58.50 ID:aJXfAZiV.net] もうskypeで議論して最終的に友情をめばえさせたら? C#である必要もないし
648 名前: ◆QZaw55cn4c mailto:sage [2015/08/23(日) 21:38:38.49 ID:GHcBJPT0.net] C++ でも delete this は普通やらない‥
649 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 21:40:51.66 ID:hc4Y2Ev5.net] デストラクタ的な機能が欲しければC#ではDisposeしか手段が無いんです ファイナライザは使えません、その処理はシステムに任せることはできないのです それが分かっていないと安易にDispose不要という考えが出てしまいます
650 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 22:03:58.87 ID:pgaNpm//.net] はいはいちごいねー 死ね
651 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 22:09:13.04 ID:oScCmTRi.net] おい待てよ Dispose不要派は 1.ファイナライザーでやればいいんだぜ だけじゃなくて 2.解放など軟弱もののやること だってボクの環境で問題になったことないんだもん の方が多数派だろ
652 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 22:11:48.27 ID:rrCWAeC5.net] >>641 うるせえ喋んなカス死ね
653 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 22:13:14.66 ID:nxY8tWuM.net] ここまで全部俺の自演
654 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 22:16:59.42 ID:1KB/gLgO.net] >>633 IDisposableを実装している場合は、明らかに不要な場合以外は使い終わった後にすぐDisposeすべき PenもBrushも中にGDIのハンドルを抱えてるわけで、アンマネージドのシステムリソースやメモリを必要以上に使ってしまう ファイナライザは残っていると仕様上開放が先延ばしになって長時間メモリを占拠するから、想定よりコストは高い >てか、gcnew って delete しなくていいためのものじゃなかったんかー! WindowsがすべてGCの管理上で動くようになればな。GC管理外のデータはプログラマが責任を持たざるをえない
655 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 22:21:09.75 ID:hc4Y2Ev5.net] コストに関しては、昨今はシビアなノーパソでもない限りは自分はあんまり気にしなくなってたりしますw ロジック的にDisposeが必要不可欠な物の方を意識したいところです
656 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 22:24:17.01 ID:prCrabVF.net] そういやVS2015から、IDisposable選択して右クリック→クイックアクションで、 Disposeのひな形吐き出してくれるんだよな。便利になったものだわ
657 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 22:29:32.06 ID:MIhiF6BJ.net] 最初から何度も言ってるがこれが正解な 1. Disposeしないと機能的にアウト→Disposeする 2. 機能的に問題ないがボトルネックになる→Disposeを許す 3. 機能的に問題ないうえに負荷も軽微→自動化しろ手で書くな クライアントは殆どが3なんだわ Disposeなんか要らないんだよ これが今日のまとめね
658 名前:デフォルトの名無しさん mailto:sage [2015/08/23(日) 22:33:20.72 ID:hc4Y2Ev5.net] 3. 機能的に問題ないうえに負荷も軽微→元クラスのIDisposeを除去せよ これが正解です