Главная страница
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.012 c
15-1241384653
Германн
2009-05-04 01:04
2009.07.05
Банальный вопрос. Архивация данных.


2-1242629348
товарищ вася
2009-05-18 10:49
2009.07.05
Показ hint-а вручную


15-1240950597
Юрий
2009-04-29 00:29
2009.07.05
С днем рождения ! 29 апреля 2009 среда


15-1241156123
palva
2009-05-01 09:35
2009.07.05
А с Первым мая никто не поздравит?


15-1241013895
andre17
2009-04-29 18:04
2009.07.05
Ошибка при работе с BOLD for Delphi