为什么不';t静态变量在ASP.NET中正常工作
本文关键字:常工作 工作 NET ASP 静态 变量 为什么不 | 更新日期: 2023-09-27 18:24:16
我构建了一个ASP.NET应用程序和其中的public static
变量:
public static WebEndPointFlow[] EndPoints = new WebEndPointFlow[10];
其中WebEndPointFlow
是我的自定义类
问题是:当我设置EndPoints
数组的某个元素时,它只能持续很短的时间。几分钟后,元素变为null
我不知道数组中的元素会发生什么。所以我创建了一个死线程来定期访问这些元素,希望GC不会处理它们。真可怜,它不起作用
关于如何始终保持我的原始元素,有什么想法吗?非常感谢!
======================================
那么这个问题与GC无关?我同意
但是为什么我的元素变为空呢?
===========================
还有一个问题:当不同的用户访问这个数组时,它看起来是一样的吗?
分类代码:
public class WebEndPointFlow
{
private static readonly ILog logger = LogManager.GetLogger(typeof(WebEndPointFlow));
private InstantMessagingFlow flow;
public InstantMessagingFlow Flow
{
get { return flow; }
}
private UserEndpointSettings userEndpointSettings;
private UserEndpoint endPoint;
public UserEndpoint EndPoint
{
get { return endPoint; }
set { endPoint = value; }
}
public StringBuilder Transcript { get; set; }
private WebSocketServer wsServer;
private Conversation conversation;
// position in the array of 'endPoints'
private int position;
public int Position
{
get { return position; }
set { position = value; }
}
private FailureResponseException e = null;
private string _TargetLyncUser;
public string TargetLyncUser
{
get { return _TargetLyncUser; }
set { _TargetLyncUser = value; }
}
private bool sendTrans = false;
public int Duration
{
get;
set;
}
public WebEndPointFlow()
{
}
与其说是垃圾收集器问题(正如您的问题中的评论所指出的,而且您无论如何都应该找到Eric Lippert一个好的来源!),不如说是Internet Information Services应用程序池的回收问题。
默认的应用程序池设置将在一段空闲时间后强制回收。此外,如果出现致命错误(如堆栈溢出),则应用程序池可能会关闭,该错误可能会终止IIS工作进程。其他情况可能是内存极度泄漏。
总结:
- 转到应用程序的应用程序池设置,并尝试增加空闲时间:(注意:您不应该永久设置此设置:我建议您这样做是为了调试目的,以便让您了解应用程序池模型是如何工作的)
- 在
Global.asax
中添加一个Application_Error
处理程序,并在那里记录异常,看看一段时间后是否出现问题