Форум: "Начинающим";
Текущий архив: 2009.07.05;
Скачать: [xml.tar.bz2];
Внизсбросить файловый буффер Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c