6

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

4

4 回答 4

10

使用缓存 (MSDN)

每个应用程序域创建一个此类的实例,只要应用程序域保持活动状态,它就保持有效。有关此类实例的信息可通过 HttpContext 对象的 Cache 属性或 Page 对象的 Cache 属性获得。

DataTable yourDataTable = new DataTable();
Cache["yourTable"] = yourDataTable;

//to access it
DataTable dt = Cache["yourTable"] as DataTable;
于 2012-10-24T08:44:52.557 回答
2

您可以使用该HttpApplicationState对象将内容存储在内存中并可供所有用户访问:

HttpContext.Current.Application["MyTable"] = myTable;

Cache对象(更线程安全):

HttpContext.Current.Cache["MyTable"] = myTable;

这是一篇关于Application and Cache的好文章。

Cache 和 Application 对象提供比 Session 对象更广泛的范围,并且数据可用于 ASP.NET 应用程序中的所有类。

于 2012-10-24T08:44:32.887 回答
0

是的,那将是一个全局缓存。最糟糕的做法是存储值是应用程序状态。它本质上是一个键值存储,只要 IIS 运行,它就一直存在。
Application["someKey"} = SomeObject;

你可以用同样的方式访问它`

var myObject = Application["someKey"];`

有很多更优雅的解决方案,但是当您需要存储少量数据时,这将帮助您解决简单的全局问题。

于 2012-10-24T08:46:24.360 回答
0

您有很多选择,应用程序缓存在同一个 ASP.NET 应用程序池中的所有用户和所有会话之间共享,请在此处查看:

http://msdn.microsoft.com/en-us/library/6hbbsfk6(v=vs.100).aspx

另一种选择可能是使用内存/嵌入式数据库,例如 SQL Server compact 或 SQL Lite,具体取决于您是否真的想使用类似 db 的方法。

于 2012-10-24T08:46:39.920 回答