none
フォームをDLL化したページメモリーの使用について RRS feed

  • 質問

  • VS2005+Win XP を使用しています。

    1つのDLLにフォームを6つ程積んで、別プロジェクトにDLLをリンクさせてコンパイルしています。

     

    EXE ← メイン画面フォームの呼び出し(中身は空っぽ)

    dll ← メインフォーム、サブフォーム

     

    内容的には以下のリンクに似たもので、初期に立ち上げた時にどうやら全部のフォームをメモリーに取り込み、最小化するとOSが一部の実行しないスワップを開放している様なのですが、これはOSの仕様的なもので無理に必要以上のメモリーを使わないようにする為には個別でEXEを作る必要があるという事でしょうか。

    http://q.hatena.ne.jp/1176258567

    GCを実行したり、Disposeを使ったりしましたが、開放出来そうにないので仕様かと思っていますが、もしVBの範囲で対処できそうな方法があればご教授お願い致します。

    2010年5月13日 5:29

回答

  • ”メモリ”とはどの数値を見て判断されているのでしょうか?
    また、ご提示のリンクの内容と今回のご質問の内容は一致しないように思えるのですが、どのような点から”似たようなもの”と判断されたのでしょうか?

    なお、.NET Framework 層の話と、OS 層の話は別個に考えるべきです。
    .NET Framework では必要になった段階でそのアセンブリが読み込まれたり、型が読み込まれたり、コードがコンパイルされたりします。

    # 正直なところ、奥深くて私自身はきちんと説明できないと思っています。
    # NyaRuRu さんの blog の記事を参照してみると、いろいろと理解が深まるとは思います。
    # http://www.google.com/search?hl=ja&lr=lang_ja&tbs=lr%3Alang_1ja&q=site%3Ad.hatena.ne.jp+%E3%83%AF%E3%83%BC%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%BB%E3%83%83%E3%83%88+NyaRuRu


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク 穂樹 2010年5月13日 15:10
    2010年5月13日 14:03
    モデレータ

すべての返信

  • ”メモリ”とはどの数値を見て判断されているのでしょうか?
    また、ご提示のリンクの内容と今回のご質問の内容は一致しないように思えるのですが、どのような点から”似たようなもの”と判断されたのでしょうか?

    なお、.NET Framework 層の話と、OS 層の話は別個に考えるべきです。
    .NET Framework では必要になった段階でそのアセンブリが読み込まれたり、型が読み込まれたり、コードがコンパイルされたりします。

    # 正直なところ、奥深くて私自身はきちんと説明できないと思っています。
    # NyaRuRu さんの blog の記事を参照してみると、いろいろと理解が深まるとは思います。
    # http://www.google.com/search?hl=ja&lr=lang_ja&tbs=lr%3Alang_1ja&q=site%3Ad.hatena.ne.jp+%E3%83%AF%E3%83%BC%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%BB%E3%83%83%E3%83%88+NyaRuRu


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク 穂樹 2010年5月13日 15:10
    2010年5月13日 14:03
    モデレータ
  • 内容的には以下のリンクに似たもので、初期に立ち上げた時にどうやら全部のフォームをメモリーに取り込み、最小化するとOSが一部の実行しないスワップを開放している様なのですが、これはOSの仕様的なもので無理に必要以上のメモリーを使わないようにする為には個別でEXEを作る必要があるという事でしょうか。http://q.hatena.ne.jp/1176258567

    GCを実行したり、Disposeを使ったりしましたが、開放出来そうにないので仕様かと思っていますが、もしVBの範囲で対処できそうな方法があればご教授お願い致します。

    なぜ無理にまで減らそうとしていますか?
    最小化した時にワーキングセット(XPなら多分これを見てる)が減るのは、「無駄なメモリ」を開放しているわけではありませんよ。
    ごく簡単に言ってしまうと、必要かもしれないけど(むしろ使ってるかもしれないけど)最小化したアプリはすぐには動かない(=すぐにはメモリを使わない)可能性が高いので他のアプリなどのために多少無理してでも空けているだけです(ワーキングセットが小さくなっても、イコール物理メモリから追い出されるというわけではありませんが)。
    Vista以降などではこの辺の動作はまた変わってきます。

    場合によってはどうしても(見た目だけでも)減らしたいということもないではないのですが、感覚的なものなら多くの場合は無理に減らす方がパフォーマンスの悪化などを招きます。
    ワーキングセットを縮小するようにAPIを使って手動で減らすことはできたと思いますが、あまり下手なことはしない方が無難です。

     

    2010年5月13日 15:03
  • ご教授、ありがとうございます。

    私の調べようが不足していました。
    元々、是が非でも削ろうとは思ってませんでしたが、殆どが設定画面で通常は使わないのでタスクバーを閉じた時に
    タスクマネージャの表示上では 1/4 以上の差が出たので、きちんとした理由がわかって無かったので作り方が不味い様で
    あれば改変しておきたいと思っていました。

    参考URLを見てもご指摘の通りと確認出来たので解決済みにさせて頂きます。
    ありがとうございました。
    2010年5月13日 15:28
  • 私の調べようが不足していました。
    紹介のURLは大変参考になり、助かりました。

    内容として、「デマンドページング」が正に聞きたかった内容です。
    最悪、コーディングなどを見直す必要が出るかと思いましたが、
    結果として、OS側の目標値である事が理解できたので問題解決済みとさせて頂きます。
    http://d.hatena.ne.jp/NyaRuRu/20051022

    ありがとうございました。
    2010年5月13日 15:45