c# – 信号量异常 – 将指定的计数添加到信号量将导致超出其最大
我一直在这个SemaphoreFullException安静一段时间.
总结一下.. 我已经看到关于这个主题的所有其他线程,建议设置Pooling = False. 我正在使用Entity Framework 6来查询数据库,而不是将dbcontext“处置”到用户代码的任何地方. 在任何给定的时刻,该错误随机发生.应用程序是否被使用无关紧要.有时,由于这个问题 – 我必须重新启动IIS,因为新用户停止获得身份验证. 到目前为止我已经尝试过 >检查是否正在处理DB事务对象. 注意:在我的应用程序中,我主要使用linq-to-EF对象来查询数据库. Exception: System.Threading.SemaphoreFullException Message: Adding the specified count to the semaphore would cause it to exceed its maximum count. StackTrace: at System.Threading.Semaphore.Release(Int32 releaseCount) at System.Data.ProviderBase.DbConnectionPool.CleanupCallback(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback callback,Object state,Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext,Boolean preserveSyncCtx) at System.Threading.TimerQueueTimer.CallCallback() at System.Threading.TimerQueueTimer.Fire() at System.Threading.TimerQueue.FireNextTimers() 在这方面的任何帮助将不胜感激. 解决方法
我认为这可能是解决这个问题的方法:
http://www.davepaquette.com/archive/2013/03/27/managing-entity-framework-dbcontext-lifetime-in-asp-net-mvc.aspx – 正如你可以看到的那样,在生命周期结束时,关心处理DbContext是至关重要的.
记住,Db连接最终在非托管数据库处理代码中,所以问题是,除非垃圾收集将上下文保持在主内存中,从而也阻止连接池的连接.所以迟早,在正确的条件下,你清空连接池并得到你的例外. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |