代码之家  ›  专栏  ›  技术社区  ›  Daniel Magliola

由于RAM故障,System.AccessViolationException是否会发生?

  •  3
  • Daniel Magliola  · 技术社区  · 15 年前

    我有一个网站,我已经工作一年了。 最近,它开始不时地抛出System.AccessViolationException,在我的开发人员机器中,主要是在我离开机器时…

    几个星期以来,我没有更改服务器代码上的任何内容,因为我一直在100%地研究javascript部分,并且这个错误最近开始出现。

    另外,我正在做的代码是100%管理的。我没有做任何互操作,调用奇怪的DLL,什么都没有。它是纯vb.net,所以我不知道如何自己生成其中一个…

    现在,我用这台新机器已经有几个月了,它不能100%正常工作。例如,每2到3天,我就会得到一个蓝屏。我没有时间正确地诊断它,但我怀疑我可能有故障的RAM芯片。

    故障RAM是否可能导致访问违规异常?
    或者我有一个我应该调查的实际问题吗?(除了我的公羊)


    更新:

    我真的找不到错误发生的地方。
    我得到“未处理的异常,是否要调试?”对话框,当我附加调试器时,我有线程列表,其中包含所有的ASP.NET线程,以及3个我自己创建的线程。
    对于这3个,我有一个调用堆栈,它们都在sleep()调用中停止(这是可预期的)。
    对于所有其他线程,包括vs指向的问题线程,我没有调用堆栈。我也没有任何关于这个例外的细节。

    所以我不知道它是否每次都发生在同一个地方。

    至于memtest,是的,我打算做一些类似的事情,我只是希望能有一些时间尽快完成,但同时我想知道这是否能解释这个问题。


    更新2:

    在事件日志中找到这个…

    发生未处理的异常,进程被终止。

    Application ID: DefaultDomain    
    Process ID: 6632    
    Exception: System.AccessViolationException
    
    Message: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
    
    StackTrace:    at System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr pHandler, RequestNotificationStatus& notificationStatus)
       at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
       at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
    

    有什么办法吗?
    谢谢
    丹尼尔

    3 回复  |  直到 14 年前
        1
  •  3
  •   JaredPar    15 年前

    故障RAM是否可能导致访问违规异常?

    是的,这是可能的。如果进程的底层内存的行为不可预测,那么是的,它可能会导致许多不同类型的应用程序错误,包括AccessViolationException。

    故障RAM是否可能导致访问违规异常?

    我会说是 许多的 更可能的是,您调用的程序或库中的错误是错误的。不过,第一步是找出发生AccessViolationException的原因,或者更重要的是,在哪里发生。尝试附加一个调试器,中断AccessViolationExceptions并查看实际发生的情况。

    本的建议也是一个很好的方法,可以很快排除RAM的问题。

        2
  •  2
  •   Ben S    15 年前

    如果你怀疑有故障的RAM,就跑吧。 memtest86 .

    但是如果错误总是发生在同一个调用中,那么它可能不是RAM。

        3
  •  2
  •   Ian Kemp    15 年前

    这只发生在你的开发机器上吗?如果是,那么故障RAM/硬盘(页面文件)是非常可能的。如果某个库(可能是某个本机映像DLL)已损坏,您可能还需要重新安装.NET框架。

    简单地说:

    如果错误每次都发生在不同的代码段中,那么这是一个很好的指示器,表明整个系统出了问题。

    另一方面,如果错误在同一段代码中重复出现,那么几乎可以肯定的是,这段代码有问题。

    如前所述,使用memtest86+确认您的内存是否良好。