ASP.Net静态对象

问题描述:

我试图缓存一些我从数据库中检索到的信息。我决定使用静态列表<>成员来存储信息。根据我的经验,我知道在多线程应用程序中使用List <>我需要使用锁定语句来保护对它的访问。我是否以完全相同的方式对待我的Asp.Net代码中的任何代码?锁定声明仍然有效吗?ASP.Net静态对象

锁将工作。请注意,如果有多个工作进程,则最终会有多个版本的列表。他们每个人都将受到自己的锁保护。

这里的一个非常实际的危险是,如果您未能释放锁定,您的整个Web应用程序可能会挂起。在您的ASP.NET页面正在执行时,用户可能会断开连接;所以要小心在意外时间抛出的异常。

+0

这可能吗?我的印象是lock(){}保证锁将被释放。另外,你是否知道或者至少知道我在哪里可以找出多久ASP.Net会为请求创建一个新线程而不是一个全新的过程? – 2009-06-14 18:40:55

+0

同意锁(){}将保证锁释放。您可以在“最大工作进程”下的“应用程序池”设置中配置IIS中的进程数。默认值是1,这意味着只有一个进程。 – Andomar 2009-06-14 18:43:34

围绕List方法的锁定语句肯定会起作用,但如果您需要ASP.NET应用程序中的缓存功能,我会建议您使用适用于此功能的Cache类。

这取决于您是否要修改列表。这里有一个很好的讨论这个问题:Do i need a lock on a list? C#