c# - MVC session 变量存储内存与磁盘缓存

标签 c# asp.net-mvc-3 caching

我使用 session 变量存储了许多动态制作的大位图:

   public static MySession Current
        {
            get
            {
                MySession session =
                  (MySession)HttpContext.Current.Session["__MySession__"];
                if (session == null)
                {
                    session = new MySession();
                    HttpContext.Current.Session["__MySession__"] = session;
                }
                return session;
            }
        }

使用磁盘缓存会更好吗?如果是的话,是否有一个很好的示例或文档。提前致谢。

最佳答案

SessionState 中存储大型项目通常是 a bad idea - 由于服务器内存的使用,它会限制应用程序的可扩展性。即使您移动 SessionState to SQL ,它也会增加应用程序的 IO 和存储要求。

下面,我假设您在 Controller 上有一个动态图像生成操作,然后引用该操作,例如<img src='http://myserver/image/generate/wmAvatar' > ,即您渲染动态图像的原因是为了浏览器的消耗?

如果动态图像是特定的“每个用户”或每个 session : 不使用 session 状态,而是使用适当的 Http Caching headers 动态生成和传递图像,然后它们应该由浏览器缓存。您可能仍需要处理 If-Modified-Since requests 的案例

如果图像可以在多个用户之间共享,或者至少可以由同一用户跨 session 重复使用,那么可以,您可以将它们存储到磁盘(例如 SSD)中配置为的文件夹中适当的缓存(如果可以的话,甚至预先计算图像),然后您的 img 链接将不再是动态的( http://myserver/images/123456.jpg )。但是,您需要处理过期图像的清理,并处理已删除图像的 404 类型错误。如上所述,使用 Http 缓存 header 来减少不必要的 I/O。然而如今,使用键值/NoSql 数据库在内存中进行缓存也很常见,例如Redis ,然后可以在云中扩展,例如Elasticache

关于c# - MVC session 变量存储内存与磁盘缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16476320/

相关文章:

c# - Linq-to-SQL 和 sp_reset_connection

C# 读取 XML 标签

c# - 在 C# 中,如何从字典中获取键列表?

javascript - 如何使用 PhoneGap/Cordova 在本地缓存图像文件?

c# - 删除资源字典中未使用的样式

ajax - 如何使用 ASP.NET MVC3 抛出 ajax 错误

c# - 使用 ajax mvc3 .net 将参数传递给 jquery

asp.net - Razor - 如何在 div 标签中显示 html 内容?

angularjs - 更新缓存的模板

ruby-on-rails - Ruby on Rails : Clear a cached page