有没有一种简单的方法可以在 ASP.NET 中的服务器上的内存中存储一个所有用户都共享的简单表?假设我有一个简单的聊天程序,我只想在内存中保存最后 100 条记录(这不是一个真正的应用程序,只是一个示例)。假设我不想让 SQL 中的整个表专门用作这个只有 100 条记录的聊天缓冲区。有什么方法可以创建内存数据表并在连接的用户之间共享?
4 回答
每个应用程序域创建一个此类的实例,只要应用程序域保持活动状态,它就保持有效。有关此类实例的信息可通过 HttpContext 对象的 Cache 属性或 Page 对象的 Cache 属性获得。
DataTable yourDataTable = new DataTable();
Cache["yourTable"] = yourDataTable;
//to access it
DataTable dt = Cache["yourTable"] as DataTable;
您可以使用该HttpApplicationState
对象将内容存储在内存中并可供所有用户访问:
HttpContext.Current.Application["MyTable"] = myTable;
或Cache
对象(更线程安全):
HttpContext.Current.Cache["MyTable"] = myTable;
这是一篇关于Application and Cache的好文章。
Cache 和 Application 对象提供比 Session 对象更广泛的范围,并且数据可用于 ASP.NET 应用程序中的所有类。
是的,那将是一个全局缓存。最糟糕的做法是存储值是应用程序状态。它本质上是一个键值存储,只要 IIS 运行,它就一直存在。
Application["someKey"} = SomeObject;
你可以用同样的方式访问它`
var myObject = Application["someKey"];`
有很多更优雅的解决方案,但是当您需要存储少量数据时,这将帮助您解决简单的全局问题。
您有很多选择,应用程序缓存在同一个 ASP.NET 应用程序池中的所有用户和所有会话之间共享,请在此处查看:
http://msdn.microsoft.com/en-us/library/6hbbsfk6(v=vs.100).aspx
另一种选择可能是使用内存/嵌入式数据库,例如 SQL Server compact 或 SQL Lite,具体取决于您是否真的想使用类似 db 的方法。