Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

сбросить файловый буффер


ford ©   (2009-05-15 14:58:00) 

Доброго времени суток!
использую 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:49:00) [1]


> к чему бы он


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

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


ford   (2009-05-15 15:45:00) [2]


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

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


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

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


ford   (2009-05-15 15:37:00) [4]


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

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


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


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


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


ford   (2009-05-15 15:15:00) [6]


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

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


ford   (2009-05-15 15:13:00) [7]


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

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо