关于应用程序加载的OutOfMemoryException

时间:2014-09-24 22:13:03

标签: c# .net wpf

这个错误让我发疯。我用c#制作了这个应用程序,几天前它正在运行很好,但自从我安装了.net原生预览后,它就作为后台进程开始工作直到它到达:{{1当它停止执行代码时...它会在几秒后从任务管理器消失并将其写入事件日志:

MainWindow mainWindow = new MainWindow();

或者这个:

Faulting application name: CryptoLight.exe, version: 1.0.0.0, time stamp: 0x54233e4c Faulting module name: KERNELBASE.dll, version: 6.3.9600.17055, time stamp: 0x532943a3 Exception code: 0xe0434352 Fault offset: 0x00011d4d Faulting process ID: 0xce8 Faulting application start time: 0x01cfd8428be7903d Faulting application path: C:\Users\<Name>\Documents\Visual Studio 2013\Projects\CompleteCryptography\CompleteCryptography\bin\Release\CryptoLight.exe Faulting module path: C:\WINDOWS\SYSTEM32\KERNELBASE.dll Report ID: cf371a9b-4435-11e4-bef6-6894233c343e Faulting package full name: Faulting package-relative application ID:

今天早些时候(我第一次遇到这个问题)我在启动应用程序时得到 Application: CryptoLight.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: System.OutOfMemoryException Stack: at MS.Internal.Resources.ResourceManagerWrapper.GetStream(System.String) at MS.Internal.AppModel.ResourcePart.EnsureResourceLocationSet() at MS.Internal.AppModel.ResourcePart.GetContentTypeCore() at System.IO.Packaging.PackagePart.get_ContentType() at System.Windows.Application.LoadComponent(System.Object, System.Uri) at CryptoLight.MainWindow.InitializeComponent() at CryptoLight.App.App_Startup(System.Object, System.Windows.StartupEventArgs) at System.Windows.Application.OnStartup(System.Windows.StartupEventArgs) at System.Windows.Application.<.ctor>b__1(System.Object) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32) at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate),我想我已经通过删除重复的.net安装来修复它,但此问题就在此之后开始。 。

编辑:经过一些调试后,我终于找到导致此错误的代码行:Fatal CLR Error: 80004005 InitializeComponent();。为什么MainWindow()导致InitializeComponent();,当我的应用程序仅使用45 - 50 mb时,我得到此异常,而我在64位PC上的4 gb中有大约3 gb ram

3 个答案:

答案 0 :(得分:1)

我很抱歉,但我可以给你一个提示,没有任何完整的......我正在写它作为答案,因为它很长,不适合评论。但仍然可以帮助..

事实:除了一些罕见的情况,许多.Net版本可以共存于一个系统上。如果安装新版本的框架会破坏您的应用程序 - 可能意味着您的应用程序“已打开以进行更新”,并且它选择了最新的框架,而不是坚持使用它构建的框架。

提示#1:您可以创建一个“清单”文件(即app.exe.manifest),在里面可以说明允许使用哪些框架版本。因此,即在具有Net4的系统上,您可以强制应用程序在Net2.0级别上运行。我无法为您提供语法..但它很容易在互联网上找到。

提示#2:如果情况非常暗,您可以启用预启动日志记录。 .Net使用“Fusion引擎”来确定应该使用哪个框架DLL,并且在应用程序实际运行之前启动此引擎。 Fusion会检查系统中的内容,检查应用程序的要求(即清单)并尝试将所有内容绑定在一起。您可以启用“融合日志记录”,然后运行应用程序,然后关闭日志记录并检查日志以了解为程序集选择了哪些DLL。如果选择了错误的,你不知道为什么会有帮助。只是不要忘记关闭日志,因为它会减慢所有.Net应用程序的启动速度:)

答案 1 :(得分:1)

.net框架附带了Windows的问题,我认为.net本机预览正在弄乱它。系统还原解决了问题

答案 2 :(得分:0)

您是否安装了Visual Studio for .NET Native Preview?我认为它附带最新的CLR。我们有可能在CLR中意外引入了回归。请在Microsoft Connect上提交一个错误并向我发送一个链接(karel.zikmund@you-know-where.com)。

请在错误报告中提供您的clr.dll版本:

filever /v %WINDIR%\Microsoft.NET\Framework\v4.0.30319\clr.dll (grab the FileVersion string)

另外请在应用程序崩溃时添加转储(将VS作为本机调试程序附加)。

-Karel Zikmund(CLR /.NET Native可靠性团队的开发人员)