栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

ASP.NET静态变量的生命周期

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ASP.NET静态变量的生命周期

静态变量在应用程序域的生命周期内一直存在。因此,导致您的静态变量“重置”的两件事是应用程序域重启或使用新类。对于将静态变量存储在aspx
Page类中的情况,当ASP.NET决定将aspx Page重新编译为新类时,可能会丢失静态变量,用新的类替换旧的页面类。

出于这些原因,如果系统决定重新启动或替换该类(.NET不会杀死正在运行的应用程序域中的类/程序集),则您的静态变量将重置,因为您将通过重新启动或替换获得一个新的类。这适用于aspx页面和App_Code文件夹中的类

如果出于任何原因认为需要重新编译该类,则ASP.NET将替换该类(请参见ASP.NET动态编译)。

您无法防止由于应用程序域重启而丢失静态变量,但是您可以尝试避免在类替换中使用它。您可以将静态变量放在不是aspx页面且不在App_Code目录中的类中。您可能希望将它们放置

staticclass
在程序中的某个位置。

public static class GlobalVariables{    public static int SomeGlobalUnsecureID;    public  static string SomeGlobalUnsecureString;}

静态变量是每个池的,这意味着如果您有2个运行asp.net站点的池,则您将有2个不同的静态变量。(网络花园模式)

如果系统使用这种方式之一重新启动asp.net应用程序,则静态变量将丢失。

  1. 池决定需要重新编译。
  2. 您打开app_offline.htm文件
  3. 您手动重新启动池
  4. 池已达到您定义的一些限制,然后重新启动。
  5. 出于任何原因,您都将重新启动iis或池。

此静态变量不是线程安全的,如果您从其他线程访问它们,则需要使用 特殊的lock 关键字。

由于应用程序重启无论如何都将重置您的静态信息,因此,如果您确实要保留数据,则应使用自定义类将数据存储在数据库中。您可以存储每个用户的信息会话状态与数据库会话状态模式。ASP.NET应用程序状态/变量将无法为您提供帮助,因为它们存储在内存中,而不是数据库中,因此它们也会在应用程序域重启时丢失。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/432995.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号