none
オーバーヘッド回避の方法 RRS feed

  • 質問

  • Form1.exe内に含まれるソースを分割して、
    Form1.exe、DLL1.dll、DLL2.dll、DLL3.dll、DLL4.dll、DLL5.dll
    とした場合、Form1.exeのみの場合と比べて、細分化した分、オーバーヘッドが生じて
    パフォーマンスが落ちてしまいます。
    事前にマッピングすればある程度回避できるなど何かパフォーマンスを向上させる方法はありますでしょうか。
    a-
    2009年3月10日 3:56

すべての返信

  • そのパフォーマンスの低下というのは具体的にどれぐらいのものでしょうか?
    理屈としては、はじめてそのアセンブリにアクセスするときに走る DLL ロード処理以外、どのアセンブリに存在するかは影響しないはずですが。
    2009年3月10日 8:58
  • 返信ありがとうございます。
    第一回目のDLL ロード処理の時間が遅いことも困っています。
    DLLを500種類LoadFileするプログラムを計測したところ、

    第一回目
    8.3秒
    第二回目以降
    1.7秒

    でした。二回目以降のDLLの読み込みによるパーフォーマンスの低下はなんとか目をつぶれるのですが、
    一回目の遅さには問題としています。

    この回避方法として一度キャッシュに入ってしまえばよいので、起動時に
    マルチスレッドを利用して裏でDLLのロードを行おうと思っていますが、
    他に何かよい方法はあるのでしょうか。
    a-
    2009年3月10日 9:55
  • アー さん の発言:

    第一回目のDLL ロード処理の時間が遅いことも困っています。
    DLLを500種類LoadFileするプログラムを計測したところ、

    500ファイルに分割はやり過ぎな感じがするのですが、本当にそこまで分割しなければならない理由があったんでしょうか?
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年3月10日 13:49
    モデレータ
  • 全てロードするなら1つにまとめればいいですし、選択的にロードするならパフォーマンスの問題にはなりませんよね。
    何かアプローチが間違っていませんか?

    その500ファイルには何が入っているのでしょうか。
    2009年3月10日 14:51