Delphi EOutOfResources (GDIError) - PullRequest
       10

Delphi EOutOfResources (GDIError)

3 голосов
/ 18 мая 2011

Я написал приложение, в котором иногда нахожу ошибки EOutofResources, вызванные методом GDIError модуля Graphics при сохранении TBitmap32 в поток.

Насколько я знаю, это может происходить из пределов gdi или пределов кучи.я знаю, что для процесса есть ограничение по умолчанию 10000 ручек.Таким образом, мое приложение в соответствии с диспетчером задач сообщает только 620.

Я скачал и запустил инструмент мониторинга информации о куче рабочего стола, который сообщил об этом:

Desktop Heap Information Monitor Tool (Version 8.1.2925.0)
Copyright (c) Microsoft Corporation.  All rights reserved.
-------------------------------------------------------------
  Session ID:    0 Total Desktop: (  7360 KB -   11 desktops)

  WinStation\Desktop            Heap Size(KB)    Used Rate(%)
-------------------------------------------------------------
  WinSta0\Default                    3072             44.5
  WinSta0\Disconnect                   64              4.5
  WinSta0\Winlogon                    128             10.2
  Service-0x0-3e7$\Default            512             29.1
  Service-0x0-3e4$\Default            512              6.8
  Service-0x0-3e5$\Default            512              6.8
  SAWinSta\SADesktop                  512              0.5
  __X78B95_89_IW\__A8D9S1_42_ID       512              0.5
  Service-0x0-1ae39$\Default          512              2.4
  Service-0x0-12d284a7$\Default       512              2.5
  Service-0x0-1312b6d4$\Default       512             15.0
-------------------------------------------------------------

Как указано выше, я использовал только 44%куча рабочего стола в winsta0.

Кроме того, время от времени возникает эта ошибка.оно никогда не достигает упомянутых пределов.Как я могу проверить, где проблема?Что вызывает повышение этой ошибки?

Спасибо

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

Вероятно, это вовсе не ошибка ресурса.Иногда Delphi сообщает об ошибках GDI, которые не могут быть преобразованы в конкретное сообщение об ошибке как нехватка ресурсов.Смотрите реализацию GDIError в Graphics.pas.

Если вы можете воспроизвести это в IDE, лучший способ выяснить, где и почему это происходит, - включить параметр «Использовать отладочные DCU» в настройках компилятора и включить параметр отладчика Stop On Delphi Exceptions призапуск вашего приложения.

2 голосов
/ 18 мая 2011

Возможно, у вас утечка ресурсов и / или памяти.

Нахождение утечек памяти
Если вы используете отладочную версию FastMM, она покажет вам отчет об утечках памяти при закрытии вашей программы.

Следующая статья должна вам помочь:
http://wiert.wordpress.com/2009/07/29/delphi-fastmm-using-fastmm4-for-debugging-your-memory-allocations-part-1-introduction/

Поиск утечек ресурсов
Обратите внимание, что FastMM, хотя и является важным инструментом для обнаружения утечек памяти , не находит утечек ресурсов.
AQTime может найти их, и у него есть 30-дневный период следа. Проверьте это по адресу:
http://smartbear.com/products/development-tools/performance-profiling/

Если вам нужен инструмент с утечкой ресурсов с открытым исходным кодом, попробуйте: http://www.kbasm.com/denomo.html

Удачной охоты.

...