Delphi EOutOfResources (GDIError)

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

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

Я загрузил и запустил инструмент Desktop Heap Information Monitor Tool, который сообщил следующее:

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.

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

Спасибо


person Paul    schedule 18.05.2011    source источник
comment
Возможно, у вас утечка дескрипторов растровых изображений?   -  person Ondrej Kelle    schedule 18.05.2011
comment
Я думаю, вам стоит опубликовать соответствующий код.   -  person Sam    schedule 19.05.2011


Ответы (2)


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

Поиск утечек памяти
Если вы используете отладочную версию 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 < / а>

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

person Johan    schedule 18.05.2011

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

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

person 500 - Internal Server Error    schedule 18.05.2011
comment
can't be translated (или: это слишком скучно для перевода), как указано в этом ответе - person Wolf; 27.01.2015