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

Вниз

сбросить файловый буффер   Найти похожие ветки 

 
ford ©   (2009-05-15 14:58) [0]

Доброго времени суток!
использую TFileStream для работы с файлом
файл достаточно большой, и много операций чтения и записи.
все время вылетала ошибка Out of Memory
попробовал проследить чегож ей не хватает
смотрел при помощи

var status:TMemoryStatus;
...
  Status.dwLength := sizeof(TMemoryStatus);
  GlobalMemoryStatus(Status);
...


оказалось что
заканчивается виртуальная память
status.dwAvailVirtual
физической еще много
проверил FastMM утечек нет
вобщем решил что это заканчивается буффер выделяемый виндой для работы с файлом
и при проверки остатка виртуальной памяти делю его закрытие и снова открываю

f.Free;
f:=TFileStram.Create(fName);

на сколько я помню, вроде бы была возможность сброса буфферов, выделяемых для файла, на диск.
но честно непомню как :(
в классе TFileStream и его родителях
ни какой функции не нашел

подскажите, как можно сбросить в данном случае все эти буфферы и освободить виртуальную память ???
или что лучше использовать вместо TFileStream


 
Сергей М. ©   (2009-05-15 15:05) [1]

FlushFileBuffers, но на "проблему" Out of Memory отсутствие явного сброса никак не влияет - ищи грабли в другом месте


 
ford ©   (2009-05-15 15:13) [2]


> Сергей М. ©   (15.05.09 15:05) [1]

после того как я вставил кусок
где проверяю
остаток виртуальной памяти
и ежели её менее 50000000 байт то
f.Free;
f:=TFileStream.Create(fName);
т.е. пересоздаю объект
память вертается в зад
:)
т.е. собственно говоря
я был прав
и это файловые буфферы
поэтому грабли именно тут
чесслово
(хотя я могу и ошибаться)


 
ford ©   (2009-05-15 15:15) [3]


> Сергей М. ©   (15.05.09 15:05) [1]
>
> FlushFileBuffers

а где эта функция ??
в каком модуле
ненайду её у себя в хелпе
(поиском искал тока одна и то FlushFileBuff называется и судя по хелпу нето)


 
Сергей М. ©   (2009-05-15 15:32) [4]


> ненайду её у себя в хелпе


Не в том хелпе ищешь.
Это WinAPI-функция, ищи ее в Win32 Programmer"s Reference, а декларирована она соотв-но в Windows.pas


 
ford ©   (2009-05-15 15:37) [5]


> Сергей М. ©   (15.05.09 15:32) [4]

а Handle
который есть у объекта TFileStream
он пойдет для этой функции??


 
Игорь Шевченко ©   (2009-05-15 15:41) [6]

тебе нужен программист


 
ford ©   (2009-05-15 15:45) [7]


> Игорь Шевченко ©   (15.05.09 15:41) [6]
>
> тебе нужен программист

очень содержательный ответ :)
тока вот к чему бы он


 
Сергей М. ©   (2009-05-15 15:49) [8]


> к чему бы он


К тому что у THandleStream есть св-во Handle,  которое и следует использовать параметром вызова FlushFileBuffers

Но против [6] я не возражаю)



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

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

Наверх




Память: 0.48 MB
Время: 0.01 c
10-1158834548
MaxCmd
2006-09-21 14:29
2009.07.05
Кодировки в Excel


11-1203580173
Tolyan
2008-02-21 10:49
2009.07.05
Создание формы визуально в KOL


15-1241011871
Savek
2009-04-29 17:31
2009.07.05
Безопасность компьютера может быть под угрозой


3-1223294960
DelphiN!
2008-10-06 16:09
2009.07.05
Утечка памяти при работе с TIbDataSet


15-1240833219
Nic
2009-04-27 15:53
2009.07.05
Влияние объёма контента на посещаемость