- - PR -
継承したコントロールのメモリの解放
«前のページへ
1|2|3|4
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-02-17 14:15
たくさんの返答ありがとうございます。
こちらでもいろいろと試してみましたが、ワーカーセットのメモリ増加のほうは マシンの性能によるみたいです。 何台かのPCで試しましたが、性能の良いPCでは増加が少ない傾向でした。 結果としては 渋木宏明(ひどり)さん の言われている通り、 極端なシナリオの場合には対策(Sleepをいれるなど)の必要があるということになるんでしょうかね。 私的にはそんな条件があるぐらいなら、昔のように自分で解放させてくれたほうがありがたいのですが・・・。 | ||||||||||||
|
投稿日時: 2009-02-17 19:31
もし、GC.Collect を呼び出すのであれば下記の3行した方がいいみたいです。
http://msdn.microsoft.com/ja-jp/library/ms998547.aspx System.GC.Collect(); // ファイナライゼーションが終わるまでスレッド待機 System.GC.WaitForPendingFinalizers(); // ファイナライズされたばかりのオブジェクトに関連するメモリを開放 System.GC.Collect(); | ||||||||||||
|
投稿日時: 2009-02-18 01:13
こんばんは。
すいません。今頃になって現象の検証をしています。 少し遅いコメントですが、 最初にKT工房さんがおっしゃられていた現象について…
最適化を有効にする場合と、有効にしない場合の生成アセンブリの違いを見ていますが どうも最適化を有効にしない場合は、VBコンパイラが 作成したクラスのコンストラクタに以下のようなコードを挿入していますね。
これがKT工房さんのおっしゃる現象と関係しているように思います。 ちなみに、C#コンパイラでは最適化に関係なく 上記のようなコードの挿入は見られません。 メモリが解放されない現象も起きないようです。 | ||||||||||||
|
投稿日時: 2009-02-18 03:21
残念ながら私のPC(CPU:Intel Core2,メモリ2G)では再現しませんでした。ワーキングセットも22MBくらいで安定しちゃってます。 私のPCの性能が良いのでしょうか?(苦笑) ところで「サーバーGC」にしてみたら、また違う結果になったりしませんかね!? GCSettings.IsServerGC プロパティ 私の環境ですと、 ワークステーションGCのときに比べサーバーGCのほうが フルGCの発生がかなり減りましたけれども。
結果1(ワークステーションGC): IsServerGC = False CollectionCount gen0 3738 CollectionCount gen1 1869 CollectionCount gen2 5 結果2(サーバーGC): IsServerGC = True CollectionCount gen0 1780 CollectionCount gen1 890 CollectionCount gen2 1 考察: サーバーGCが「Stop the world」方式??だから、回収率が良いということでしょうか。 [ メッセージ編集済み 編集者: Tdnr_Sym 編集日時 2009-02-18 03:41 ] | ||||||||||||
|
投稿日時: 2009-02-18 09:49
↑のように書かれると僕が「Sleep 使え」と言ってるみたいなので、やめてほしいな 前にも書きましたが、Sleep 呼び出しの効果は差が激しすぎるので、およそ「解決策」とは呼べない処置です。 直接的な対策は GC.Collect() 呼び出しですが、馬鹿正直にこれを実行すると、これはパフォーマンス面で相当のペナルティを払うことになります。(極端なシナリオであるならあるほど不利なはず) なので、現実的には「構造体配列を自分で管理して上手に使う」など、設計レベルで工夫するのが妥当でしょう。 | ||||||||||||
|
投稿日時: 2009-02-18 22:28
ご返答ありがとうございます。
環境のバリエーションを色々考えなければならないソフトでは 有効な手立てとは言えませんね。 ただ私の携わっている業務系システム(Webアプリ以外)では OSのバージョンやハードスペックなど環境状態を限定する事が多く 更に運用状況の制限も設け易いため状況状態は想定し易い背景があります。 外部環境に関係なくGCの気分によって効果が大きく変わるならば困ったものですが。
ありがとうございます。 |
«前のページへ
1|2|3|4