0

データベース(SQL2008)から画像をストリーミングするこのサイトがありますが、これがサーバーのCPU使用率を非常に高くしているサイトだと思います。CPU使用率は少なくとも60〜90%です。

私はMVC3を使用しており、以下は画像をビューに送信するコントローラーのコードです。

 [OutputCache(Duration = 86400, VaryByParam = "GUID")]
 public FileStreamResult GetFile(string guid)
    {
        Guid id = new Guid(guid);
        Thumbnail thumbnail = thumbService.GetThumbnailByGUID(id);
        Stream stream = new MemoryStream(thumbnail.FileContent.ToArray());
        var fsr = new FileStreamResult(stream, "image");
        return fsr;
    }

景色:

 <div style="background:url('@url');background-repeat:no-repeat;background-position:50% top;background-color:#fff;" class="photoThumb">

上記の@urlは/GetFile/guidです

誰かが私が間違っていることを教えてもらえますか?

ありがとう

回答と別の質問に関する最新情報:

以下の回答の[OutputCache(Duration = 86400、VaryByParam = "GUID")]が機能し、サイトのパフォーマンスが向上しました。CPU使用率は8〜60%に低下しましたが、すべてが破棄されていることも確認したいので、FileStreamResultがそれを実行しているかどうか、または手動で実行する必要がありますか?

4

2 に答える 2

3

画像リクエストごとにデータベースヒットがあり、ページリクエストごとに複数の画像があると思います-これにより、CPU使用率が高くなる可能性があります。画像をキャッシュしてみてください。

アクションを装飾する場合

[OutputCache( Duration = 86400, VaryByParam = "id" )]

これにより、結果の画像が 1 日間キャッシュされます。つまり、データベース クエリが少なくなり、サーバーの負荷が少なくなることが期待されます。

于 2012-05-29T04:42:22.640 に答える
0

以下のように変更することもできます。

[OutputCache(Duration = 86400, VaryByParam = "GUID")]
     public FileStreamResult GetFile(string guid)
        {
            Guid id = new Guid(guid);
            Thumbnail thumbnail = thumbService.GetThumbnailByGUID(id);
            var fsr; 
            using(Stream stream = new MemoryStream(thumbnail.FileContent.ToArray()))
            {
                fsr = new FileStreamResult(stream, "image");
            }
            return fsr;
        }

上記のコメントで述べたように、ページをレンダリングすると FileStreamResult が自動的に破棄されます。

于 2012-05-29T12:23:30.237 に答える