Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 长时间正常运行后出现NullReferenceException_Asp.net_Vb.net_Nullreferenceexception - Fatal编程技术网

Asp.net 长时间正常运行后出现NullReferenceException

Asp.net 长时间正常运行后出现NullReferenceException,asp.net,vb.net,nullreferenceexception,Asp.net,Vb.net,Nullreferenceexception,我有一个ASP.Net应用程序,它在长时间运行后开始抛出NUllReferenceExceptions。在每个单独的会话中,我们都会在早期使用这些代码,在这里我们试图建立某种类型的推荐信息。问题是,我不知道什么可以抛出这个异常 所讨论的方法(堆栈跟踪中的最顶层)是: 它所属的类继承自ArrayList。我已经检查过了,唯一添加到这个ArrayList的是Referral类的实例(它有多个构造函数,都很简单) 我们所知道的是,我们可以有一个没有引用信息的请求,它会导致抛出异常。同时,如果一个推荐人

我有一个ASP.Net应用程序,它在长时间运行后开始抛出NUllReferenceExceptions。在每个单独的会话中,我们都会在早期使用这些代码,在这里我们试图建立某种类型的推荐信息。问题是,我不知道什么可以抛出这个异常

所讨论的方法(堆栈跟踪中的最顶层)是:

它所属的类继承自ArrayList。我已经检查过了,唯一添加到这个ArrayList的是Referral类的实例(它有多个构造函数,都很简单)

我们所知道的是,我们可以有一个没有引用信息的请求,它会导致抛出异常。同时,如果一个推荐人的请求进来了,它就可以正常工作。在这两种情况下,都没有在查询字符串中传递任何内容(因此我认为您可以跳到'3注释

所以,我的问题是,这个方法中的什么会导致抛出NullReferenceException?如果您需要添加额外的代码段或类定义,只需呼喊

Utility.RequestSubDomain具有合理的复杂性,因此我怀疑它是否被内联并从堆栈跟踪中删除。它的顶部是:

Public Shared Function RequestSubDomain(ByVal uri As System.Uri) As String
    If uri Is Nothing Then
        Return ""
    End If

任何关于查找更多信息的帮助或建议,我们都将不胜感激。很明显(因为有这么多问题),这只发生在生产中,所以我不想开启调试。

我仔细研究了一下,想到的最有可能的两件事是:

  • wrRequest
    可以为空
  • ArrayList
    中可能包含空值,导致枚举器返回空值
如果是我,我会首先将注意力集中在这一部分。是否有可能
me.GetEnumerator
返回一个枚举器,其中一个项的值为空

For Each item As Referral In Me 
  item.Names ' Can item be null here causing the exception on the getter of Names?
Next item 

事实证明,arraylist中有一个空值——在某些情况下,多个线程处理同一个对象(从arraylist继承)并调用Add()。所以出现空值是因为内部索引被不同的线程增加了两次。

多长时间?多长时间?我假设一个月…@Aristos-我们可以在发生这种情况的间隔数周,循环使用应用程序池会导致它消失。我们通常每天有400到1000个新会话。我有类似的想法我在2台服务器上发现了问题。我发现在4-6周后,我们出现了内存泄漏(我不知道从哪里找到的,我也找不到)这会导致缓存内存超出限制,然后开始出现神秘的错误。我使用ProcessExplorer进行监视。每台服务器每天有1000-2000个新会话。@Aristos-我办公室的其他人认为内存泄漏(由于发生之前的时间长)作为原因,但我怀疑那些有推荐人的客户是否仍然会发现该网站可用,而那些没有原因的客户会抛出异常。我一直在阅读adplus/windbg/sos,有点不想获取一个转储文件并进行分析,但我相信大多数客户确实有推荐人,我不想停止该网站10分钟如果可能的话,获取转储文件的分钟数。可能的重复我正在尝试消除这些可能性。从调用堆栈中,wrRequest来自Page.Request,希望它永远不会为null。我已经注释掉了“Inherits ArrayList”行,唯一添加到列表中的代码是执行新的引用()事先在线。我会继续查找。计划在下次系统处于这种状态时使用ADPlus转储系统,这将有希望让我看看ArrayList中是否有null(不知怎么的)。好吧,最后在它处于愚蠢状态时捕获内存转储,ArrayList中确实有null元素(而且比我预期的要多),所以现在是时候对更多的代码进行搜索了。
For Each item As Referral In Me 
  item.Names ' Can item be null here causing the exception on the getter of Names?
Next item