powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Утечка памяти при печати
11 сообщений из 11, страница 1 из 1
Утечка памяти при печати
    #40058172
SHS_SHS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
При печати через канву принтера куда-то девается память. И при большом количестве документов выдает ошибку что мол закончилась память. Может не выдать ошибку, а просто печать пустые листы.
Упрощенный код такой:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 
  aImage := PicStreamToBmp(aImageStream);
  Printer.PrinterIndex := GetIndexPrinterByName(aPrinterName);
  Printer.BeginDoc;
  try
    Printer.Canvas.StretchDraw(R, aImage);
  finally
    Printer.EndDoc;
    Printer.PrinterIndex := -1;
    aImage.Free;
  end;


Тот же код, только с логом:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 
  LogMsg('1 - ' + GetMemoryUseProgram);  
  aImage := PicStreamToBmp(aImageStream);
  LogMsg('2 - ' + GetMemoryUseProgram);  
  Printer.PrinterIndex := GetIndexPrinterByName(aPrinterName);
  Printer.BeginDoc;
  try
    LogMsg('3 - ' + GetMemoryUseProgram);  
    Printer.Canvas.StretchDraw(R, aImage);
    LogMsg('4 - ' + GetMemoryUseProgram);
  finally
    Printer.EndDoc;
    Printer.PrinterIndex := -1;
    LogMsg('5 - ' + GetMemoryUseProgram);
    aImage.Free;
    LogMsg('6 - ' + GetMemoryUseProgram);
  end;



1 - 36728 KB
2 - 45804 KB - + ~9м Bitmap.LoadFrom..
3 - 46240 KB
4 - 55144 KB - + ~9м нарисовали на канве принтера
5 - 54984 KB
6 - 46092 KB - - ~9м Bitmap.Free

Подскажите как освободить память занятую при печати? А то не очень удобно следить за памятью и перезапускать программу.
...
Рейтинг: 0 / 0
Утечка памяти при печати
    #40058182
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Она сама освободится когда принтер наконец-то напечатает то, что ты ему послал.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Утечка памяти при печати
    #40058185
SHS_SHS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Память освобождается только после перезапуска программы. До печати программа в памяти занимает около 20-30мб, после печати - 1,5 - 2гб. И после завершения печати и через час после завершения печати не освобождается.
...
Рейтинг: 0 / 0
Утечка памяти при печати
    #40058190
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А здесь показано только 9 мб. Значит память течёт где-то в другом месте. FastMM +
FullDebugMode тебе в руки или хотя бы включи рапорт об утечках встроенного менеджера.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Утечка памяти при печати
    #40058203
SHS_SHS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Показано только 9мб, т.к. код в процедуре, а процедура в цикле.
Если закомментить
Код: pascal
1.
Printer.Canvas.StretchDraw(R, aImage);

, то утечек нет.
...
Рейтинг: 0 / 0
Утечка памяти при печати
    #40058205
SHS_SHS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А еще утечек нет, если выключить принтер )))
...
Рейтинг: 0 / 0
Утечка памяти при печати
    #40058206
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это ничего не меняет на предыдущем ответе. ReportMemoryLeaksOnShutdown и FullDebugMode
тебе в руки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Утечка памяти при печати
    #40058216
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SHS_SHS
Код: pascal
1.
 aImage := PicStreamToBmp(aImageStream);



а aImageStream точно где-то освобождается?
...
Рейтинг: 0 / 0
Утечка памяти при печати
    #40058228
SHS_SHS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11
SHS_SHS
Код: pascal
1.
 aImage := PicStreamToBmp(aImageStream);



а aImageStream точно где-то освобождается?

Если бы было так все просто )
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
      aImageStream := TMemoryStream.Create;
      try
        ExecQueryStream('....', MainDatabaseReports, nil, aImageStream, True);
        aImageStream.Position := 0;
        PrintImage(aImageStream); // процедура печати код, которой указан выше
      finally
        aImageStream.Free;
      end;



Эврикал написал, что все нормально, 96кб утечки.
Memory Leak: Total size=96316 - Count=1022.
...
Рейтинг: 0 / 0
Утечка памяти при печати
    #40058234
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Убери выбор принтера из процедуры.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Утечка памяти при печати
    #40058407
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй перед каждой печатью создавать свой принтер и после каждой печати уничтожать его.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Утечка памяти при печати
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]