Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1241622164
Step
2009-05-06 19:02
2009.07.05
Скрыть главную форму


15-1240862526
tesseract
2009-04-28 00:02
2009.07.05
Языки свервысокого уровня.


2-1242476766
partizan
2009-05-16 16:26
2009.07.05
Warning: FOR-Loop variable "i" may be undefined after loop


15-1241037006
Юрий
2009-04-30 00:30
2009.07.05
С днем рождения ! 30 апреля 2009 четверг


2-1242331541
Максим
2009-05-15 00:05
2009.07.05
Перемещение на передний план





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский