是否因为RAM故障而发生System.AccessViolationException?

时间:2009-09-18 14:18:09

标签: vb.net memory access-violation ram

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

我几周没有更改服务器代码上的任何内容,因为我一直在Javascript部分工作100%,这个错误最近开始出现。

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

现在,我已经使用这台新机器几个月了,而且它不能100%正常工作。每隔2或3天我会得到一个蓝屏。我没有时间正确诊断它,但我怀疑我的RAM芯片有问题。

错误的RAM是否可能导致AccessViolationException?
或者我是否有一个我应该研究的实际问题? (除了我的RAM)


更新

我真的无法找到错误发生的地方 我得到“未处理的异常,你想调试吗?”对话框,当我附加调试器时,我有Threads列表,我有所有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 个答案:

答案 0 :(得分:3)

错误的RAM是否可能导致AccessViolationException?

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

可能是因为错误的RAM导致AccessViolationException?

我会说你的程序或库中的错误更有可能 更有可能是错误的。第一步是找出发生AccessViolationException的原因或更重要的原因。尝试附加调试器,中断AccessViolationExceptions并查看实际发生的情况。

Ben S的建议也很好,可以快速排除RAM情况。

答案 1 :(得分:2)

如果您对RAM有问题有疑问,请运行memtest86

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

答案 2 :(得分:2)

这只发生在您的开发机器上吗?如果是,那么很可能是RAM /硬盘(页面文件)错误。您可能还希望重新安装.NET Framework,以防其中一个库(可能是其中一个本机映像DLL)已损坏。

简单地说:

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

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

如前所述,请使用Memtest86 +确认您的记忆力是否良好。