我在其中构建了一个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()
{
}
答案 0 :(得分:4)
而不是垃圾收集器问题(正如你的问题中的评论所指出的那样,你应该发现Eric Lippert是一个很好的资源!),它可能是Internet Information Services应用程序池的问题&# 39;回收。
默认应用程序池设置将在一些空闲时间后强制回收。此外,如果存在可能导致IIS工作进程死亡的致命错误(如堆栈溢出),则应用程序池可能会停止运行。其他情况可能是极端的内存泄漏。
总结:
Application_Error
中添加Global.asax
处理程序,并在那里记录异常,并在一段时间后查看是否出现问题。