在ASP.NET中将一个简单的表存储在内存中?

时间:2012-10-24 08:42:27

标签: c# asp.net .net memory

是否有一种简单的方法可以在ASP.NET中的服务器上的内存中存储一​​个简单的表,以便所有用户共享?假设我有一个简单的聊天程序,我只想在内存中保存最后100条记录(这不是一个真正的应用程序,只是一个例子)。假设我不希望SQL中的整个表专用于只有100条记录的聊天缓冲区。有什么方法可以创建内存数据表并在连接的用户之间共享它?

4 个答案:

答案 0 :(得分:8)

使用Cache (MSDN)

  

每个应用程序域创建此类的一个实例   只要应用程序域保持活动状态,它就仍然有效。   有关此类实例的信息可通过以下方式获得   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的方法。