如何缓存FileContentResult以提升性能?

7

目前,我有以下操作从我的数据库中返回文件(图像、PDF等):

    //
    // GET: /FileManager/GetFile/ID
    [OutputCache(Duration = 600, VaryByParam = "ID")]
    public ActionResult GetFile(int ID)
    {
        FileService svc = new FileService(new SqlFileRepository(base.ConnectionString));

        KsisOnline.Data.File result = svc.GetFileByID(ID);

        return File(result.Data, result.MimeType, result.UploadFileName);
    }

我正在使用OutputCache属性,但我不知道是否使用正确,也不知道如何为此进行优化。
目前的代码似乎在Firefox(3)中具有缓存功能,但在IE(7)中没有。由于某种原因,IE每次都会从数据库请求图像(这显然是很糟糕的),我不知道该如何解决它。确实,IE不正确地支持标准,但也许我仍然没有遵循一些首选缓存约定。我真的很希望得到一些帮助,以便在跨浏览器的最小DB命中和缓存支持下工作。
编辑: 要查看上面的代码示例或使用浏览器/工具对其进行分析,请参阅此链接

可能是如何在ASP.NET MVC RC1中使用FileResult返回304状态的重复问题。 - Judah Gabriel Himango
3个回答

5
尝试使用ServerAndClient位置:
[OutputCache(Duration=600, VaryByParam="ID", Location=OutputCacheLocation.ServerAndClient)]

2
你需要使用 Fiddler 工具来查看IE和你的应用程序发送的HTTP头信息,以及这些信息与Firefox的不同之处。你需要让浏览器发送 If-Modified-Since 头信息(可能还需要一个 ETag 头信息),你的应用程序应该响应HTTP 302状态。

我有点希望首先得到OutputCacheAttribute的具体帮助。但是您的建议在优化HTTP头方面将是无价之宝。谢谢。 - Matt Kocaj
2
@Anton 你是不是想说“使用HTTP 304状态进行响应”?302是重定向。 - Richard Szalay

0
ControllerContext.HttpContext.Response.ClearHeaders()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接