哈希表插入失败.负载系数过高.-asp.NET 4.0 MVC3



我们有一个运行在F5负载平衡服务器上的ASP.NET 4.0 MVC3应用程序。

我们收到以下例外情况。我们在web应用程序中不进行多线程处理,但不知道F5负载平衡服务器是否可以考虑到这一等式。我们看到了早期版本的.NET出现异常的地方(大多数其他帖子都涉及.NET 2.0和3.5)。有人在.NET 4.0中遇到过这个问题吗?

该异常导致应用程序不可用,因为登录时,如果不遇到异常,则无法加载任何页面。

其他链接已经审查:

  • 哈希表插入失败。负载系数过高。-ASP.NET 2.0
  • 哈希表插入失败。负载系数过高。净2.0 SP2
  • WPF(.NET 4.0)内部出现令人沮丧的错误:哈希表插入失败。负载系数过高

2012-02-02 06:01:42671[26]致命系统[(null)]–未处理XYZ应用程序中发生异常。System.InvalidOperationException:哈希表插入失败。荷载系数太高了。最常见的原因是多个线程写入同时哈希表。在System.Collections.Hashtable.Insert(对象键、对象值、布尔值add)位于System.ComponentModelTypeDescriptor.NodeFor(类型类型,布尔createDelegator)位于的System.ComponentModelTypeDescriptor.GetProvider(类型类型)System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider。。ctor(类型type)在System.Web.Mvc.ModelBinderDictionary.GetBinder(typemodelType,IModelBinder fallbackBinder)System.Web.Mvc.ControllerActionInvoker.GetModelBinder(ParameterDescriptorparameterDescriptor)System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContextcontrollerContext,ParameterDescriptor ParameterDescriptor)System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContextcontrollerContext、ActionDescriptor ActionDescriptor)System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContextcontrollerContext,String actionName)位于的System.Web.Mvc.Controller.ExecuteCore()System.Web.Mvc.ControllerBase.Execute(RequestContext RequestContext)
在System.Web.Mvc.MvcHandler。<>c_DisplayClass6。<>c_DisplayClassb.b_5()在System.Web.Mvc.Anc.AncResultWrapper。<>c_DisplayClass1.b_0()在System.Web.Mvc.MvcHandler。<>c__DisplayClasse.b_d()在System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()在System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔运算&完成同步)

正如您从堆栈跟踪中看到的,它没有指向代码中的特定位置,这使得调试变得困难。

如有任何建议,以防止遇到这种例外情况,我们将不胜感激。

这是一个不常见的问题,但它确实发生在许多人身上(包括我)。它似乎与任何特定的负载阈值都没有关联,只是"发生"了,一旦发生,无论负载如何,它都会继续更频繁地发生
解决方案:
临时:重置IIS并祈祷它不会再次发生
永久性:从KB文章中描述的microsoft获得补丁,或者等待下一个版本的.Net进行修复(据报道,它已经在4.5 Beta中修复)

查看Kim在此线程中的响应:http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/172f4f77-601e-4b4f-8d98-582f8f62a98e


你好,马特,

在.NET 2.0中,此错误几乎总是由多个线程同时修改哈希表引起的。修复方法是在修改哈希表之前插入锁,因为哈希表不是多写器线程安全的。另一种可能的解决方案是通过Hashtable.synchronized使用synchronized包装器,但我们建议使用前者进行更精细的控制。

因此,如果是您的代码在修改哈希表,那么这就是修复方法。根据你提供的信息,我认为情况并非如此。您提到您在ASP2.0网站上遇到了这个错误,所以这可能是由下游Hashtable调用程序引起的。例如,如果调用堆栈如下所示,请注意,这是一个在最新版本中修复的错误。

谢谢,Kim

堆栈跟踪:位于System.Collections.Hashtable.Insert(Object键、Object值、布尔添加)位于System.Collections.Hashtable.set_Item(对象键,对象值)位于System.ComponentModelTypeDescriptor.CheckDefaultProvider(类型类型)位于System.ComponentModelTypeDescriptor.NodeFor(类型类型,布尔createDelegator)位于System.ComponentModelTypeDescriptor.GetDescriptor(类型类型,字符串类型名称)位于System.ComponentModelTypeDescriptor.GetAttributes(类型componentType)位于System.Web.UI.ThemeableAttribute.IsTypeThemable(类型类型)位于System.Web.UI.Control.ApplySkin(第页)位于System.Web.UI.Control.InitRecursive(控件命名容器)位于System.Web.UI.Control.InitRecursive(控件命名容器)位于System.Web.UI.Control.InitRecursive(控件命名容器)位于System.Web.UI.Control.InitRecursive(控件命名容器)位于System.Web.UI.Control.InitRecursive(控件命名容器)在System.Web.UI.Page.ProcessRequestMain上(布尔值包含同步点之前的阶段,布尔值包括同步点之后的阶段)

最新更新