【问题标题】:What is better: Static variable V.S. Asp.NET Application Session?更好的是:静态变量 V.S. Asp.NET 应用程序会话?
【发布时间】:2010-10-27 23:59:51
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

如果你只有其中一个,差别不大。

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

【讨论】:

  • 那么,如果站点位于网络场中呢?你有这方面的例子吗?
  • @Choco:那么你实际上不能共享同一个对象,因为你在服务器之间发送数据。这是一篇概述选项的文章:codeproject.com/Articles/180726/…
【解决方案2】:

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

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

发件人:http://support.microsoft.com/default.aspx?scid=kb;en-us;Q312607

和:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      只有当你想存储整个会话的值时才应该使用真正的会话变量,但如果你希望变量被初始化并在表单之间使用,并且如果在 betwwen 中更改应该是在整个应用程序中可用的同一对象必须使用静态变量。

      【讨论】:

        猜你喜欢
        • 2013-01-26
        • 2012-12-19
        • 1970-01-01
        • 2011-06-04
        • 2012-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多