9

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

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

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

4

4 回答 4

11

如果您只有其中一个,则几乎没有区别。

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

于 2009-05-21T17:29:29.133 回答
4

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

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

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

和:

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

于 2011-09-08T18:52:52.223 回答
0

这是您浏览多个页面并收集数据的常见场景。对于这种情况,我会使用 Session 对象。当整个应用程序需要同一个对象时,应该使用静态变量。

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

于 2009-05-21T17:47:39.597 回答
0

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

于 2009-07-14T11:58:18.847 回答