“ Операция успешно завершена »исключение

У меня есть собственный метод, который находит наибольший размер, который можно использовать для данной строки и шрифта, чтобы заполнить данное поле, не обрезая текст. Чтобы проверить это, я создал службу, которая циклически перебирает несколько разных строк и несколько разных шрифтов и выполняет их партии в цикле Parallel.For. Когда эта служба запущена, все ядра ЦП в системе находятся на% 90-% 100. По прошествии 8 или 9 часов он начнет выдавать исключения. Он по-прежнему будет работать большую часть времени, но время от времени будут возникать исключения или всплески исключений.

Самое внутреннее исключение имеет сообщение «Операция успешно завершена» и исходит из метода доступа WidthIncludingTrailingWhitespace для объекта FormattedText. Стек вызовов выглядит следующим образом:

   at MS.Win32.UnsafeNativeMethods.RegisterClassEx(WNDCLASSEX_D wc_d)
   at MS.Win32.HwndWrapper..ctor(Int32 classStyle, Int32 style, Int32 exStyle, Int32 x, Int32 y, Int32 width, Int32 height, String name, IntPtr parent, HwndWrapperHook[] hooks)
   at System.Windows.Threading.Dispatcher..ctor()
   at System.Windows.Threading.Dispatcher.get_CurrentDispatcher()
   at System.Windows.Media.TextFormatting.TextFormatter.FromCurrentDispatcher(TextFormattingMode textFormattingMode)
   at System.Windows.Media.FormattedText.LineEnumerator..ctor(FormattedText text)
   at System.Windows.Media.FormattedText.DrawAndCalculateMetrics(DrawingContext dc, Point drawingOffset, Boolean getBlackBoxMetrics)
   at System.Windows.Media.FormattedText.get_Metrics()
   at System.Windows.Media.FormattedText.get_WidthIncludingTrailingWhitespace()
   ...My Library Here...

Изучая это, я обнаружил, что нераспределенные объекты рисования (графика, значки и т. Д.) Являются частой причиной этого, но я не смог найти никаких используемых одноразовых объектов. В коде изменения размера текста используются классы WPF (FontFamily, FormattedText и Typeface), и ни один из них не реализует IDisposable.

У меня есть perfmon, отслеживающий процесс, и хотя использование памяти, количество дескрипторов и количество потоков немного различаются, они никогда не взлететь из-под контроля. Это говорит мне, что, вероятно, это не утечка ручки. Что еще это могло быть?

ОБНОВЛЕНИЕ: Я запускаю тест уже несколько дней, но с одним существенным изменением: он выполняет обычный для вместо параллельного для. Он еще не разбился, и perfmon показывает горизонтальные линии с очень небольшим отклонением. Возможно, это проблема с распараллеливанием, а не с отрисовкой текста WPF?

15
задан 14 July 2011 в 12:31
поделиться