3

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

几周以来我没有对服务器代码进行任何更改,因为我一直在 100% 地处理 Javascript 部分,并且这个错误最近开始出现。

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

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

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


更新:

我真的无法找到错误发生的位置,真的。
我得到“未处理的异常,你想调试吗?” 对话框,当我附加调试器时,我有线程列表,其中有所有 ASP.Net 线程,3 我自己创建。
对于这 3 个,我有一个 Call Stack ,它们都在 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)

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

4

3 回答 3

3

有故障的 RAM 是否有可能导致 AccessViolationException?

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

有缺陷的 RAM 是否可能导致 AccessViolationException?

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

Ben S 的建议也是快速排除 RAM 案例的好方法。

于 2009-09-18T14:24:57.227 回答
2

如果您对有故障的 RAM 有任何疑问,只需运行memtest86即可。

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

于 2009-09-18T14:21:50.833 回答
2

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

简单的说:

如果错误每次都出现在不同的代码部分,那么这很好地表明您的系统整体出现了问题。

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

正如之前的答案所述,使用 Memtest86+ 来确认您的记忆力是否良好。

于 2009-09-18T14:27:47.597 回答