1

次の方法を使用して、画像をbase64文字列に変換します。

FileStream fs = new FileStream(imagePath, FileMode.Open,FileAccess.Read);
byte[] filebytes = new byte[fs.Length];
fs.Read(filebytes, 0, Convert.ToInt32(fs.Length));
return Convert.ToBase64String(filebytes, Base64FormattingOptions.InsertLineBreaks);

このメソッドは、実行時にページの読み込みごとに数回実行されます。サイトのパフォーマンスへの影響が心配です。

パフォーマンスに影響することは承知していますが、大幅に影響しますか?

4

4 に答える 4

5

一般に、パフォーマンスへの影響を判断する最良の方法は、それを測定することです。これにより、CPU使用率、メモリオーバーヘッド、およびディスクIOが発生する可能性があるため、これらは問題が発生しないように注意する領域です。負荷テストツールを使用して、現実的な数の同時ユーザーをシミュレートし、何が起こるかを確認します。

価値があるのは、これらの画像が常に同じものである場合、おそらくこのメソッドの出力をキャッシュできることです。

于 2011-07-17T23:00:01.493 に答える
2

ガベージコレクションのパフォーマンスが低下すると思います。IDisposableは私たちの友達です。

byte[] filebytes;
using(FileStream fs = new FileStream(imagePath, FileMode.Open,FileAccess.Read))
{
    byte[] filebytes = new byte[fs.Length];
    fs.Read(filebytes, 0, (int)fs.Length);
}
return Convert.ToBase64String(filebytes, Base64FormattingOptions.InsertLineBreaks);
于 2011-07-17T23:11:51.387 に答える
0

コードで最もパフォーマンスが「非効率的」な部分は、ファイルシステムから画像を読み取ることです。

base64エンコーディングの実行は、メモリ内で実行される非常に簡単なアルゴリズムです。

于 2011-07-17T23:00:33.603 に答える
0

これが実際にサイトのパフォーマンスに影響を与えるかどうかは、サイトのボリュームと、サイトが行う他のすべてと比較したファイルの読み取りとエンコードの時間に依存します。最善の方法は、今のところコードをそのままにして、パフォーマンスへの影響を知るためにログを追加することです。

同じファイルの読み取りを繰り返した場合は、サイズとファイルアクセスを繰り返した頻度に応じて、エンコードされたファイルをメモリにキャッシュするか、エンコードされたファイルをディスクにキャッシュするようにキャッシュを追加できます。

于 2011-07-17T23:04:14.470 に答える