LinQ 试图读取或写入受保护的内存。这通常表明其他内存已损坏

Posted

技术标签:

【中文标题】LinQ 试图读取或写入受保护的内存。这通常表明其他内存已损坏【英文标题】:LinQ Attempted to read or write protected memory. This is often an indication that other memory is corrupt 【发布时间】:2011-05-26 01:00:17 【问题描述】:

我收到内存访问冲突错误:

System.AccessViolationException:试图读取或写入受保护的内存。这通常表明其他内存已损坏。

线程信息: 线程 ID:5 线程账户名:IIS APPPOOL\OpenSpanServerAppPool 是否冒充:假 堆栈跟踪:在 System.Linq.Enumerable.WhereEnumerableIterator1.Select[TResult](Func2 选择器处) 在 System.Linq.Enumerable.Select[TSource,TResult](IEnumerable1 source, Func2 选择器) 在 System.Web.Mvc.MvcHandler.RemoveOptionalRoutingParameters() 在 System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext,IController& 控制器,IControllerFactory& 工厂) 在 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext,AsyncCallback 回调,对象状态) 在 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext,AsyncCallback 回调,对象状态) 在 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext 上下文,AsyncCallback cb,对象 extraData) 在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

我正在使用 asp.net MVC、NHibernate,并且我的网站托管在 IIS 中,拥有自己的池,数据库是 SQL Server 2005 sp3。

您是否看到与此问题相关的内容?

我认为这可能与 MS SQL 空闲断开有关...

有什么想法吗?

感谢您的帮助。

【问题讨论】:

能否贴出 RemoveOptionalRoutingParameters 的代码,最重要的是要枚举的类型?是 NHibernate 查询吗? 我想补充一点,当我们在很长一段时间后使用这些页面时,这个错误会被重现,看起来 SQL Server 空闲断开了数据库并且它进入了休眠状态,也许是在凭据过时之后...... . 发生了什么事我的朋友们......显然没有人知道答案。与MVC相关的表现层错误。 【参考方案1】:

我们不时遇到同样的问题。我认为 Sam 找到了答案,我们的问题似乎是因为我们延迟评估数据库读取并且连接超时。问题似乎已通过在我们的数据层中调用 ToList 来解决,以确保更早地进行转换。

【讨论】:

【参考方案2】:

我在 Linq 表达式中遇到了同样的错误。我能够通过检查数据库连接的状态来解决它。如果状态关闭,则会出现错误。因此,如果连接已关闭,请打开连接。

【讨论】:

以上是关于LinQ 试图读取或写入受保护的内存。这通常表明其他内存已损坏的主要内容,如果未能解决你的问题,请参考以下文章

“试图读取或写入受保护的内存。这通常表明其他内存已损坏。”

“试图读取或写入受保护的内存。这通常表明其他内存已损坏。”

错误:试图读取或写入受保护的内存。这通常表明其他内存已损坏

System.accessviolationexception 试图读取或写入受保护的内存。这通常表明其他内存已损坏

“试图读取或写入受保护的内存。这通常表明其他内存已损坏” DllImporting C#

Visual Studio C# 试图读取或写入受保护的内存。这通常表明其他内存已损坏