Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
ВнизВыдает сообщение 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.035 c