Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.25;
Скачать: CL | DM;

Вниз

Выдает сообщение Out Of Memory   Найти похожие ветки 

 
senya   (2004-02-06 18:03) [0]

Привет мастера! Такой трабл - когда иду по списку базы клиентов,
при прохождении порядка 200 записей выдает сообщение "Out of memory".
При переходе на каждую запись выполняется
QueryHistory.Close;
QueryHistory.Prepare;
QueryHistory.ParamByName("client").AsInteger :=
QueryRead.FieldByName("id").AsInteger;
if (FormMain.CurUserID = QueryRead.FieldByName
("user_block").AsINteger) or (FormMain.CurRole = True) then
QueryHistory.ParamByName("dates").AsDate := StrToDate
("31.12.2999")
else QueryHistory.ParamByName("dates").AsDate :=
QueryRead.FieldByName("date_block").AsDateTime;
QueryHistory.Open;

Если убираю этот кусок, то не выдает.
Не подскажите что в коде неправильно?


 
VLAD-MAL   (2004-02-06 18:05) [1]

Похоже, в обработчиках событий что-нибудь...
OnInsert, OnEdit и т.п.


 
Sandman25 ©   (2004-02-06 18:10) [2]

попробуйте убрать Prepare.


 
senya   (2004-02-06 18:10) [3]

VLAD-MAL (06.02.04 18:05) [1]
извини, не понял


 
senya   (2004-02-06 18:15) [4]

Sandman25 © (06.02.04 18:10) [2]
не помогло
что ишо можно сделать


 
Sandman25 ©   (2004-02-06 18:20) [5]

Скачайте программу MemProof и посмотрите, какие ресурсы, кроме памяти, программа "сжирает".


 
Mystic ©   (2004-02-06 18:23) [6]

Узнать, куда уходит память... Проверить память менеджера памяти Delphi, проверить Windows-память, и т. д. Мониторить, но найти утечку. Возможно совободить место на диске со свопом. Купить, в крайнем случае.


 
lmatveev   (2004-02-06 22:32) [7]

Попробуй дописать
if QueryHistory.Prepared then QueryHistory.UnPrepare;
Между Close и Prepare


 
Никто   (2004-02-07 10:48) [8]

У меня недавно была утечка памяти при операции сравнения:

if (DataSet1.Fields[0].Value = DataSet2.Fields[0].Value) then ...

Правда, по моему мнению, это не совсем утечка, а просто неоптимизированная работа менеджера памяти Delphi. При большом количестве сравнений может возникать фрагментация памяти, в результате которой, при очередном запросе памяти, может возникнуть Out Of Memory. Но (с этим мнением) я могу ошибаться.

Я решил этот вопрос следующим образом:

var
V1: Variant;
V2: Variant;
begin
...
V1 := DataSet1.Fields[0].Value;
V2 := DataSet2.Fields[0].Value;
try
if (V1 = V2) then ...
...
finally
VarClear(V1);
VarClear(V2);
end;
...
end;

Так как Delphi работает со значениями полей как с Variant, приводя их, по мере надобности, к нужному типу (string, integer, и т.д.), то в Вашем случае, возможно, имеет место подобная утечка.


 
senya   (2004-02-09 18:27) [9]

Если это поможет, то могу сказать, что если во время прохода по списку отключаю DBGrid, т.е. просто программно прохожу по строкам , то такое сообщение не выдается
могет быть еще у кого -нить есть какие идеи по этому поводу
ваще ничего не получается


 
Mystic ©   (2004-02-09 18:39) [10]

> senya (09.02.04 18:27) [9]

Что говорит менеджер памяти Delphi? Что по его мнению происходит с памятью?


 
senya   (2004-02-09 18:45) [11]

Mystic © (09.02.04 18:39) [10]
а как это посмотреть?
никогда не приходилось сталкиваться



Страницы: 1 вся ветка

Текущий архив: 2004.02.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
1-79954
Tigran
2004-02-13 19:51
2004.02.25
Откуда можно скачать Delphi 6,7 или 8


14-80143
Думкин
2004-02-01 00:02
2004.02.25
С днем рождения! 1 февраля.


1-79855
Well
2004-02-10 17:25
2004.02.25
Убрать программу из


14-80215
Clift
2004-02-05 17:38
2004.02.25
ХР


14-80094
Android
2004-02-03 07:49
2004.02.25
Vendorid and Deviceid