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
|
а не забыл? |
|
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) | а не забыл? |
Все сделал как ты и сказал, но все равно пымять растет.
Провел эксперемент убрал этот таймер из проги и тогда стало все ок.
Мне кажется что каждый раз я же загружаю в память файл (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 не вызывается. |
|