更好的是:静态变量V.S. Asp.NET应用程序会话?

时间:2009-05-21 17:14:54

标签: asp.net global-variables static-members

假设您要在ASP.NET Web应用程序中的所有线程/会话之间共享某些资源,如类或变量。什么更好?

1)一个静态变量,具有该静态变量的线程安全访问器?

2)或ASP.NET应用程序会话变量?

4 个答案:

答案 0 :(得分:9)

如果你只有其中一个,那么差别很小。

如果你有几个,你应该使用静态变量而不是Application个变量。 Application.Lock方法将锁定所有 Application变量,而您可以为静态变量使用单独的同步标识符,这样每个锁只会影响访问该特定变量的代码。

答案 1 :(得分:4)

静态成员将提供更好的性能,但缺点是它们不是线程安全的:

建议您将数据存储在应用程序类的静态成员中,而不是存储在Application对象中。这样可以提高性能,因为您可以比访问应用程序字典中的项目更快地访问静态变量。

来自:http://support.microsoft.com/default.aspx?scid=kb;en-us;Q312607

http://weblogs.asp.net/plip/archive/2003/12/01/40526.aspx

答案 2 :(得分:0)

这个真正的会话变量只应该用于存储整个会话的值,但是如果你希望变量被初始化并且在表单之间使用,如果你想改变它们应该是通过整个应用程序可用于同一对象必须使用静态变量。

答案 3 :(得分:0)

这是您经历多个页面并收集数据的常见方案。我会在这个场景中使用Session对象。当完整的应用程序需要同一个对象时,应使用静态变量。

如果要保留的值取决于用户,请使用Session。