应用程序加载时出现OutOfMemoryException

问题描述:

这个错误令我发狂。我有这个应用程序用C#做的,它在几天前工作罚款,但自从我安装.net本机预览它开始作为一个后台进程,并一直工作,直到它得到:MainWindow mainWindow = new MainWindow();那就是当它停止执行代码。 。几秒钟后,从任务管理器中消失,并写入此事件日志:应用程序加载时出现OutOfMemoryException

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\Aleksandur Murfitt\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)

今天早些时候(我第一次经历次是问题)我在开始应用得到了Fatal CLR Error: 80004005,我想我可以通过删除重复.NET安装固定,但之后,这一问题开始..

编辑:后一些更多的调试,我终于找到导致此错误的代码行:InitializeComponent(); in MainWindow()。为什么InitializeComponent();导致OutOfMemoryException,我得到这个异常,当我的应用程序只使用45 - 50 MB,我有一个64 GB的PC上4 GB的免费出3 GB的内存

+1

听起来像递归方法调用。 – 2014-09-24 22:20:23

+0

@ B.K。今天早些时候我的应用程序运行良好我没有修改代码 – javaseaayameradost 2014-09-24 22:27:18

+1

'在MS.Internal.Resources.ResourceManagerWrapper.GetStream(System.String)'是应用程序试图加载一个大型资源吗?另外,在调试时是否将任何参数传递给应用程序?这可能解释了Visual Studio中的调试和直接从release文件夹运行它们之间的区别。 – 2014-09-24 22:57:41

对不起,但我可以给你只是一个提示,没有完整的。我写它作为一个答案,因为它很长,不适合评论。但仍可能有所帮助..

事实:除少数情况外,很多.Net版本可以在一个系统上共存。如果安装新版本的框架会破坏你的应用程序 - 可能是意味着你的应用程序被“打开了更新”,它选择了最新的框架,而不是坚持它的目标。提示#1:您可以创建一个“清单”文件(即app.exe.manifest),并且您可以指定允许使用哪些框架版本。因此,即使用Net4系统,您也可以强制应用程序在Net2.0级别上运行。我无法为您提供语法......但在互联网上很容易找到。

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

这是与Windows自带的.net框架的问题,我认为.net本机预览是搞乱它。系统还原解决了问题

您是否安装了Visual Studio for .NET Native Preview?我认为它带有最新的CLR。我们可能无意中在该CLR中引入了回归。请在Microsoft Connect上提交错误并发送给我一个链接([email protected])。

请提供您的clr。DLL版本在你的错误报告:

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

也请从您的应用程序崩溃(附VS本机调试器)添加到错误转储。

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