4

.Net Compact Framework アプリケーションを Windows CE デバイスの SD カードに移動すると、プログラムの実行速度が内部メモリからの実行より遅くなります。

起動が遅くなるかと思いましたが、プログラム全体です。ストレージ カードへの IO はありません。

アプリケーションが非常に遅いのはなぜですか? また、コンパクト フレームワークはアセンブリをどのように処理して読み込むのですか?

4

3 に答える 3

11

それはデマンドページングと関係があります。SDは実行可能メディアではないため、アプリをSDカードから直接実行することはできません。そのため、実行するにはRAMにプルする必要があります。通常、Windows CEには大量のRAMが搭載されていないため、ローダーがアプリケーション全体をRAMにプルして実行することはありません。確かに、ヒープとスタックはRAMにありますが、アセンブリ自体の実際のILコードは必要に応じてページインされます。また、特定のページが不要になったとシステムが判断したときにもページアウトされます。

このページングは​​パフォーマンスに影響を与える可能性がありますが、アプリ自体が本当に大きくない限り(アセンブリから取得する埋め込みリソースがたくさんある場合など)、大きな影響があることに少し驚いています。

于 2008-12-03T14:45:35.803 に答える
1

ctackeによる以前の「デマンドページング」の回答に同意します。

解決策として、実際の実行可能ファイルと DLL をカードからハードディスクにコピーする SD カードからローダ プログラムを実行し、ローダからプログラムを実行する方法があります。以降の実行では、ローダーはハードディスクのバージョンが最新かどうかを検出し、最新の場合は直接起動します。ハードディスクのバージョンが最新でない場合、ローダーは古いファイルをカードから再度コピーしてから、実際のプログラムを実行します。

以前、ネットワークのリモート ロケーションにロードされたプログラムからこれを行ったことがありますが、非常にうまく機能しました。

于 2008-12-03T15:38:56.990 に答える