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