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" )]

这应该将结果图像缓存一天,这意味着更少的数据库查询,并希望减少服务器上的负载。

于 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 回答