C# 来自Aero Shake和远程桌面断开的Windows窗体内存不足异常

C# 来自Aero Shake和远程桌面断开的Windows窗体内存不足异常,c#,winforms,remote-desktop,aero,C#,Winforms,Remote Desktop,Aero,我有一个windows窗体应用程序,它使用NPlot库显示两个实时图表。每当我不小心触发aero抖动(抖动窗口导致windows最小化所有其他窗口),或者当我在远程桌面上运行应用程序时,由于网络错误导致远程桌面连接断开,我的.Net应用程序就会崩溃,并出现OutOfMemory异常 经过一些分析,我确认这不是一个真正的内存不足异常,而是某种资源问题——有什么想法吗 每个请求-我的堆栈跟踪如下,遗憾的是,它本质上是说我的CCR工作线程收到了outofmemoryexception(我的所有代码都作

我有一个windows窗体应用程序,它使用NPlot库显示两个实时图表。每当我不小心触发aero抖动(抖动窗口导致windows最小化所有其他窗口),或者当我在远程桌面上运行应用程序时,由于网络错误导致远程桌面连接断开,我的.Net应用程序就会崩溃,并出现OutOfMemory异常

经过一些分析,我确认这不是一个真正的内存不足异常,而是某种资源问题——有什么想法吗

每个请求-我的堆栈跟踪如下,遗憾的是,它本质上是说我的CCR工作线程收到了outofmemoryexception(我的所有代码都作为任务在CCR线程池上运行)


有关更多信息,请参阅位于的帮助和支持中心。

我没有“如何修复”的答案,而且我认为由于有关崩溃的信息不足,您不会得到答案

但是,我确实有一些关于如何隔离此问题的提示,以及如何亲自调试如此棘手的问题:

首先,我要确认NPlot库是问题的根源。如果屏幕上没有NPlot内容,它还会崩溃吗?使用CCR(并发和协调运行时,对吗?)是另一种可能性,因为它使用了一些相当时髦的方法,使用了yield-return-continuation传递样式。您可以尝试将任务作为.NET 4 TPL任务而不是CCR任务运行,看看这是否改变了什么

底线:找出导致问题的组件:NPlot、CCR或其他

其他一些可能有帮助的地方:隔离问题发生前执行的最后一段代码。它是一致的最后一段代码吗?还是随机的?尝试在调试器下运行时使崩溃发生

最后,您应该确认您看到的不是操作系统错误。例如,快速搜索“OutOfMemoryException remote desktop”会显示,实际上可能是操作系统中的一个bug,而您的一个组件恰好发现了这个bug

如果其他一切都失败了,你可能不得不拿出重型设备:


我的直觉是,由于你在做可视化工作(Aero shake,或远程桌面)时会出现异常,我打赌你的NPlot图表库是问题的原因。从那里开始,并将其隔离。

超人你能显示异常的堆栈跟踪吗?谢谢Davide-刚刚发布了我的堆栈跟踪。
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.OutOfMemoryException
Stack:
   at Microsoft.Ccr.Core.TaskExecutionWorker.ExecutionLoop()
   at System.Threading.ThreadHelper.ThreadStart_Context(System.Object)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Threading.ThreadHelper.ThreadStart()