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](Func
2 选择器处)
在 System.Linq.Enumerable.Select[TSource,TResult](IEnumerable1 source, Func
2 选择器)
在 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 试图读取或写入受保护的内存。这通常表明其他内存已损坏