C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как закрыть файл?, Как закрыть файл?
Alex_83
Отправлено: 10.06.2004, 17:20


Не зарегистрирован







Я вот так открываю файл
TStringList *File = new TStringList;
AnsiString SFile = "C:\\FilterSets\\qwer.txt;
File->LoadFromFile(SFile);
File->Strings[2] = "привет";
File->SaveToFile(SFile);

дело в том что этот промежуток у меня в таймере и получаестся что каждый раз файл открывается и после часа работы эта программа в опретивной памяти занимает около 30 метром.
так если закрыть закрывать файл каждырза после открытия то все будет ок
Но как это сделать?
Зарание спасибо!
Георгий
Отправлено: 10.06.2004, 22:27


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



а
CODE
delete File
не забыл?
olegenty
Отправлено: 11.06.2004, 07:45


Ветеран

Группа: Модератор
Сообщений: 2412



offtopic
а потом ещё говорят, что VB рулит... да нет, просто надо временем жизни экземпляра класса корректно управлять...
olegenty
Отправлено: 11.06.2004, 07:50


Ветеран

Группа: Модератор
Сообщений: 2412



есть CodeGuard, который, правда, в BCB6 нихрена не пашет. так вот, когда он в BCB5 пахал, невредно было пользоваться. очень поучительно увидеть, что забыл в цикле удалить экземпляр, и порядка 3000 объектов висит в памяти хрен знает зачем. очень дисциплинирует.
khram
Отправлено: 11.06.2004, 22:27


Ученик-кочегар

Группа: Участник
Сообщений: 4



QUOTE (Георгий @ 10/06/2004, 23:29)
а
CODE
delete File
не забыл?

Все сделал как ты и сказал, но все равно пымять растет.
Провел эксперемент убрал этот таймер из проги и тогда стало все ок.
Мне кажется что каждый раз я же загружаю в память файл (File->LoadFromFile(...); ) но потом я же его не выгружаю ,
а заново загружаю новый и при этом память и растет.
Как мне избавится от этого?
Георгий
Отправлено: 12.06.2004, 16:45


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



Привет

для проверки набрал вот такой кодик
CODE
void __fastcall TForm1::Button1Click(TObject *Sender)
{
const bool old_state = this->Timer1->Enabled;
const bool new_state = !old_state;
this->Timer1->Enabled=new_state;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
TStringList *File = new TStringList;
AnsiString SFile = "c:\\qwer.txt";
File->LoadFromFile(SFile);
File->Insert( 2, "asdasd" );
//File->Strings[2] =;
File->SaveToFile(SFile);
delete File;
++this->CSpinEdit1->Value;
}
//------------------------------------
нашёл текстовый файлик на 3.5 метра и дождался пока 1500 раз сработает таймер.
в результате убедился, что:
1. TStringList работает очень медленно
2. спустя 1.5 часа после начала работы процесс в ОП занимал столькоже сколько и в начале — около 2х метров.

QUOTE
Мне кажется что каждый раз я же загружаю в память файл (File->LoadFromFile(...); ) но потом я же его не выгружаю, а заново загружаю новый и при этом память и растет.
неправильно кажется.

проверь все ветки алгоритма — возможно где то волшебное delete File не вызывается.

Вернуться в Вопросы программирования в C++Builder