我一直在寻找由于.NET运行时内部错误(退出代码0x80131506)而导致我们的.NET服务间歇性崩溃的原因。有问题的服务不会执行通常应归咎于此类错误的任何类型的操作(不安全代码,PInvoke等)。我曾尝试按照KB2679415中所述禁用并发GC以及切换到服务器GC,但是间歇性崩溃仍然存在。当以Debug模式进行编译时,此问题在.NET4.7.2和更早版本中显现。该服务广泛使用了旧版本的NHibernate(2.0.1),当我在调试器中检查了故障转储时,发生错误时,调用堆栈中总会有NHibernate代码,尽管NHibernate本身就是托管代码,因此应该不会导致这种崩溃。我设法在
我一直在寻找由于.NET运行时内部错误(退出代码0x80131506)而导致我们的.NET服务间歇性崩溃的原因。有问题的服务不会执行通常应归咎于此类错误的任何类型的操作(不安全代码,PInvoke等)。我曾尝试按照KB2679415中所述禁用并发GC以及切换到服务器GC,但是间歇性崩溃仍然存在。当以Debug模式进行编译时,此问题在.NET4.7.2和更早版本中显现。该服务广泛使用了旧版本的NHibernate(2.0.1),当我在调试器中检查了故障转储时,发生错误时,调用堆栈中总会有NHibernate代码,尽管NHibernate本身就是托管代码,因此应该不会导致这种崩溃。我设法在
在SQLHelper类上工作,以类似于XmlRpc.Netlibrary中所做的方式自动执行存储过程调用,在运行从IL代码手动生成的方法时,我遇到了一个非常奇怪的问题。我已经将它缩小到一个简单的生成方法(可能它可以进一步简化)。我创建了一个新的程序集和类型,包含两个符合的方法publicinterfaceiTestDecimal{voidTestOk(refdecimalvalue);voidTestWrong(refdecimalvalue);}测试方法只是将十进制参数加载到堆栈中,装箱,检查它是否为NULL,如果不是,则拆箱。TestOk()方法的生成如下:staticvoidBu
在SQLHelper类上工作,以类似于XmlRpc.Netlibrary中所做的方式自动执行存储过程调用,在运行从IL代码手动生成的方法时,我遇到了一个非常奇怪的问题。我已经将它缩小到一个简单的生成方法(可能它可以进一步简化)。我创建了一个新的程序集和类型,包含两个符合的方法publicinterfaceiTestDecimal{voidTestOk(refdecimalvalue);voidTestWrong(refdecimalvalue);}测试方法只是将十进制参数加载到堆栈中,装箱,检查它是否为NULL,如果不是,则拆箱。TestOk()方法的生成如下:staticvoidBu
我有一个计算量大的多线程C#应用程序,它似乎在运行30-90分钟后一直崩溃。它给出的错误是Theruntimehasencounteredafatalerror.Theaddressoftheerrorwasat0xec37ebae,onthread0xbcc.Theerrorcodeis0xc0000005.ThiserrormaybeabugintheCLRorintheunsafeornon-verifiableportionsofusercode.CommonsourcesofthisbugincludeusermarshalingerrorsforCOM-interoporP
我有一个计算量大的多线程C#应用程序,它似乎在运行30-90分钟后一直崩溃。它给出的错误是Theruntimehasencounteredafatalerror.Theaddressoftheerrorwasat0xec37ebae,onthread0xbcc.Theerrorcodeis0xc0000005.ThiserrormaybeabugintheCLRorintheunsafeornon-verifiableportionsofusercode.CommonsourcesofthisbugincludeusermarshalingerrorsforCOM-interoporP
我已经分析过了,现在我希望从我的热点中挤出所有可能的性能。我知道[MethodImplOptions.AggressiveInlining]和ProfileOptimizationclass.还有其他的吗?[编辑]我刚刚发现[TargetedPatchingOptOut]没关系,显然thatoneisnotneeded. 最佳答案 是的,还有更多技巧:-)实际上,我对优化C#代码进行了大量研究。到目前为止,这些是最重要的结果:直接传递的Func和Action通常由JIT'ter内联。请注意,您不应将它们存储为变量,因为它们随后会被称
我已经分析过了,现在我希望从我的热点中挤出所有可能的性能。我知道[MethodImplOptions.AggressiveInlining]和ProfileOptimizationclass.还有其他的吗?[编辑]我刚刚发现[TargetedPatchingOptOut]没关系,显然thatoneisnotneeded. 最佳答案 是的,还有更多技巧:-)实际上,我对优化C#代码进行了大量研究。到目前为止,这些是最重要的结果:直接传递的Func和Action通常由JIT'ter内联。请注意,您不应将它们存储为变量,因为它们随后会被称
以下代码在Release模式(或启用优化的调试)下构建并在没有附加VisualStudio调试器的情况下运行时表现不同。它似乎也只有在使用x86JITter时才会复制。我已经在x86机器上测试过它,并在x64机器上以WOW64运行(通过将平台目标设置为x86)。我只在.NET4.0上尝试过。当在Release中的调试器之外运行时,我看到:Valueis4当在调试器中运行时,WriteLine调用的e.Value.Length部分会抛出NullReferenceException,这正是我所期望的发生。代码:namespaceTest{classUsingReleasable{publi
以下代码在Release模式(或启用优化的调试)下构建并在没有附加VisualStudio调试器的情况下运行时表现不同。它似乎也只有在使用x86JITter时才会复制。我已经在x86机器上测试过它,并在x64机器上以WOW64运行(通过将平台目标设置为x86)。我只在.NET4.0上尝试过。当在Release中的调试器之外运行时,我看到:Valueis4当在调试器中运行时,WriteLine调用的e.Value.Length部分会抛出NullReferenceException,这正是我所期望的发生。代码:namespaceTest{classUsingReleasable{publi