来自Aero Shake和远程桌面断开连接的Windows窗体内存不足

时间:2011-02-25 16:59:06

标签: c# winforms remote-desktop aero

我有一个Windows窗体应用程序,它使用NPlot库显示几个实时图表。每当我不小心搞一个空气震动(摇动窗户导致窗口最小化所有其他窗口),或者当我通过远程桌面运行我的应用程序并且远程桌面连接因网络错误而断开连接时,我的.Net应用程序崩溃并出现OutOfMemory异常。

经过一些分析,我已经确认这不是一个真正的内存不足,而是某种资源问题 - 任何想法从哪里开始?

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

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()

有关详细信息,请参阅http://go.microsoft.com/fwlink/events.asp上的“帮助和支持中心”。

1 个答案:

答案 0 :(得分:2)

我没有这里的如何修复它的答案,我认为由于关于崩溃的信息不足,你不会得到一个。

但是,我确实有一些关于如何解决这个问题的技巧,我自己如何调试这样一个棘手的问题:

首先,我确认NPlot库导致了问题。如果屏幕上没有NPlot内容,它是否仍会崩溃?使用CCR(并发和协调运行时,对吗?)是另一种可能性,因为它正在做一些相当时髦的东西,产量回报延续传递风格。您可以尝试将您的任务作为.NET 4 TPL任务而不是CCR任务运行,看看是否有任何改变。

底线:隔离导致问题的组件:NPlot,CCR或其他什么?

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

最后,您应该确认您所看到的不是操作系统错误。例如,快速搜索“OutOfMemoryException远程桌面”会显示you're not the first to hit this,并且实际上可能是操作系统中的错误,并且您的某个组件恰好会发现该错误。

如果所有其他方法都失败了,你可能不得不淘汰沉重的装备:Windbg+SOS

我的直觉是,由于您在进行视觉效果(Aero摇动或远程桌面)时发生异常,我认为您的NPlot图表库是导致问题的原因。从那里开始,然后从那里隔离它。