0

タイトルのとおり、アプリ ディレクトリ内のフォルダーではなく、リソースから画像を読み込むパフォーマンスに違いはありますか? 例えば。

PictureBox1.Image = My.Resources.MyImage

それよりも

PictureBox1.ImageLocation = C:\....\Images\MyImage.png
PictureBox1.Load()
4

3 に答える 3

3

これは Windows のコア デザイン プロパティであり、実質的な違いはありません。どちらの場合も、ディスクからイメージを読み取る必要があります。メカニズムは異なりますが、結果は同じです。リソースとして埋め込まれた場合、画像はメモリ マップ ファイルを介して既にメモリにマップされています。ただし、データはそうではありません。リソースにアクセスするとすぐにページ フォールトがトリガーされ、Windows がリソースを RAM に読み込むようになります。ファイルから読み取るときは、ファイル システム キャッシュを使用します。また、ファイルデータをRAMに読み込みます。ファイルシステムもディスク上のファイルを見つける作業を行う必要があるため、少し遅くなるはずです。

Paint イベント ハンドラーで使用する場合など、画像を再度読み込む必要がある場合、データがまだ RAM にあり、別のプロセスが必要としているために破棄されなかった場合、動作は同じです。ファイルを読み取らずに取得できます。これにより、このようなコードのプロファイリングが非常に困難になりますが、常に満足のいく結果が得られます。

ファイルを見つける努力は、ここでのバランスにヒントを与えます。リソースは、めったに使用されないほど高速です。仮想アドレス空間を永久に消費するという代償を払って、非常に大きなイメージをリソースに配置したくはありません。「非常に大きい」とは、たとえば、12 メガバイトです。

于 2012-08-11T15:46:00.627 に答える
1

違いは、リソースから画像を読み込む場合、アプリケーションにパスをハードコーディングする必要がないことです。画像がリソースにある場合、アプリが存在するときは常に画像が存在します。ディスク上のパスをハードコーディングした場合、これは当てはまりません。

したがって、常にリソースを使用する必要があります。速度の違いはないと思います。そして、リソースの固有の利点がそれを上回っていると思わない場合、それは無視できるものであり、完全に無関係であることを約束します.

于 2012-08-11T08:38:53.227 に答える
0

どちらが速いか知りたい場合は、測定してください。多くの時間を割り当てる前後の時間を確認してください。

通常、リソースが変更されない場合は、リソースを選択します。シナリオ 2 を使用し、ファイルが存在しない場合はどうなるでしょうか。

于 2012-08-11T08:31:15.650 に答える