Исключение нехватки памяти в Windows Forms из-за отключения Aero Shake и удаленного рабочего стола - PullRequest
0 голосов
/ 25 февраля 2011

У меня есть приложение в форме Windows, которое отображает пару живых графиков с использованием библиотеки NPlot. Всякий раз, когда я случайно включаю аэрозряки (встряхивая окно, заставляя окна сворачивать все остальные окна), или когда я запускаю свое приложение через удаленный рабочий стол, и подключение к удаленному рабочему столу отключается из-за сетевой ошибки, мое приложение .Net падает с исключением OutOfMemory.

После некоторого профилирования я подтвердил, что это не реальное исключение нехватки памяти, а скорее какая-то проблема с ресурсами - есть идеи, куда идти?

По запросу - моя трассировка стека ниже, к сожалению, по сути, это говорит о том, что мой рабочий поток CCR получил исключение outofmemory (весь мой код выполняется как задачи в пуле потоков 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 Ответ

2 голосов
/ 26 февраля 2011

У меня нет ответа «как исправить», и я не думаю, что вы получите ответ из-за недостаточной информации о сбое.

Тем не менее, у меня есть несколько советов о том, как изолировать эту проблему, как я сам отлаживаю такую ​​сложную проблему:

Во-первых, я бы подтвердил, что библиотека NPlotвызывая проблему.Если на экране нет ничего NPlot, все равно происходит сбой?Использование CCR (Concurrency and Coordination Runtime, не так ли?) - это еще одна возможность, так как это делает довольно забавные вещи со стилем прохождения продолжения возврата доходности.Вы можете попробовать запускать свои задачи как задачи .NET 4 TPL, а не задачи CCR, посмотрите, что-то изменится.

Итог: определите, какой компонент вызывает проблему: NPlot, CCR или что-то еще?

Некоторые другие биты, которые могут помочь: изолировать последний фрагмент кода, который выполняется до возникновения проблемы.Это последовательный последний кусок кода?Или это случайно?Попробуйте вызвать сбой во время работы под отладчиком.

Наконец, вы должны подтвердить, что то, что вы видите, не является ошибкой ОС.Например, быстрый поиск «Удаленный рабочий стол OutOfMemoryException» показывает , что вы не первый, кто нажал эту , и, возможно, на самом деле это ошибка в ОС, и один из ваших компонентов просто столкнулся с этой ошибкой.

А если ничего не помогает, вам, возможно, придется уничтожить тяжелое оборудование: Windbg + SOS .

Мой инстинкт инстинктивен здесь, поскольку ваше исключение возникает, когдазанимаясь визуальными вещами (Aero Shake или удаленный рабочий стол), держу пари, что ваша библиотека графиков NPlot является причиной проблемы.Начните там и изолируйте его оттуда.

...