2

2900x2379 の画像があります。この画像をロードし、そこから小さな画像をトリミングし、そのトリミングをストリームとして返す asp.net ashx ハンドラーを作成しました。

疑似コードでは、ハンドラーにこれがあります...:

Bitmap LargeBMPToUse = null;
if (Application["MyLargeImage]" == null)
{
LargeBMPToUse  = new Bitmap("File location of image on my server");
Application["MyLargeImage"] = LargeBMPToUse;
}

//now crop image from LargeBMPToUse  and return its stream

私の質問は、これを行うためのより効率的な方法があるかどうか、および/または絶対にこの方法で行うべきではないかどうかです。

さらに、クライアントキャッシュ技術を使用できない/使用しません。

ありがとう

4

1 に答える 1

2

この質問に対する迅速かつ簡単な答えはありませんが、本当に必要でない限り、「アプリケーション」に物を入れないようにすることをお勧めします。

HttpContext.Current.Cacheの方が適しています。 アプリケーションはキャッシュではなく、グローバルな名前付きの値のコレクションです。オブジェクトをアプリケーションに追加すると、アプリケーション プールがリサイクルされるまで残ります。

さらに重要なこと(ドキュメントから、こちら):

アプリケーションの状態はフリースレッドです。つまり、アプリケーションの状態データには多くのスレッドが同時にアクセスできます。したがって、アプリケーションの状態データを更新するときは、 組み込みの同期サポートを含めてスレッドセーフな方法で行うことが重要です。Lock メソッドと UnLock メソッドを使用すると、一度に 1 つのソースだけが書き込みできるようにデータをロックすることで、データの整合性を確保できます。また、Global.asax ファイルの Application_Start メソッドでアプリケーションの状態値を初期化することにより、同時実行の問題が発生する可能性を減らすこともできます。

Application オブジェクトに画像を保存しないでください。お願いします。

于 2013-10-04T18:35:26.893 に答える