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

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

Оптимизация


Res ©   (2008-02-06 01:47:00) 

Здравствуйте! Помогите оптимизировать код. Постоянно вылетает Out memory...
Размер текстового файла 150мб. Код:

var
classname:string;
ai:TTntStrings;
ainew:TTntStrings;
int:array[1..10] of integer;
error:boolean;
begin
error:=False;
classname:=searchclass(form1.Memo1.Text);
if (searchclass(form1.Memo1.Text)='') then
begin
form1.Memo2.Lines.Add('['+Datetostr(Date)+'  '+timetostr(Time)+']'+' Ошибка! Пожалуйста вставьте Класс (поле пустое или не имеет класса) !');
end
else
 begin
 ai:=TTntstringlist.Create; //Создаю
 ainew:=TTntstringlist.Create; //Создаю
 end;
 try
 ai.LoadFromFile(form1.Edit1.Text);
 except
 form1.Memo2.Lines.Add('['+Datetostr(Date)+'  '+timetostr(Time)+']'+' Ошибка! Невозможно открыть файл!');
 error:=True;
 end;
 if error=True then
 begin
 form1.Memo2.Lines.Add('['+Datetostr(Date)+'  '+timetostr(Time)+']'+' Ошибка! Невозможно изменить класс1!');
 end
 else
 begin
 int[1]:=Pos(classname, ai.Text);
 int[2]:=PosEx('class_end', ai.Text, int[1]+1);
     if(int[1]<>0) then
     begin
     try
     ainew.Add(copy(ai.text,1, int[1]-1));
     ainew.Add(form1.Memo1.Text);
     ainew.Add(copy(ai.text,int[2]+1, length(ai.Text)));
     form1.Memo2.Lines.Add('['+Datetostr(Date)+'  '+timetostr(Time)+']'+' Класс успешно заменен!');
     except
     form1.Memo2.Lines.Add('['+Datetostr(Date)+'  '+timetostr(Time)+']'+' Ошибка! Невозможно заменить класс2!');
     end;
     ainew.SaveToFile(form1.Edit1.Text);
     form1.Memo2.Lines.Add('['+Datetostr(Date)+'  '+timetostr(Time)+']'+' Файл успешно сохранен!');
     end
     else
     begin
     form1.Memo2.Lines.Add('['+Datetostr(Date)+'  '+timetostr(Time)+']'+' Ошибка! Класс не найден!3');
     end;
 end;
ai.Free;
ainew.Free;
form1.Button2.Enabled:=True;
end;


Slym   (2008-02-06 05:52:00) [1]

проверяй

var
classname:string;
Stream:TFileStream;
ai,ainew:string;
b,e:integer;
begin
 try
   classname:=searchclass(Memo1.Text);
   if classname='' then
     raise Exception.Create('Пожалуйста вставьте Класс (поле пустое или не имеет класса)!');
   Stream:=TFileStream.Create(Edit1.Text, fmOpenRead or fmShareDenyWrite);
   try
     SetLength(ai,Stream.Size);
     Stream.ReadBuffer(ai,Length(ai));
   finally
     Stream.Free;
   end;
   b:=Pos(classname, ai);
   e:=PosEx('class_end', ai, b+1);
   if(b=0) then
     raise Exception.Create('Класс не найден!');
   ainew:=copy(ai,1,b-1)+#13#10+classname+#13#10+copy(ai,e+1, MaxInt);
   Stream:=TFileStream.Create(Edit1.Text, fmCreate);
   try
     Stream.WriteBuffer(ai,Length(ai));
   finally
     Stream.Free;
   end;
   Memo2.Lines.Add(FormatDateTime('[dd.mm.dddd hh:mm] Файл успешно сохранен!',Now));
 except
   on E:Exception do
     Memo2.Lines.Add(FormatDateTime('[dd.mm.dddd hh:mm]',Now)+'Ошибка! '+ E.Message);
 end;
 Button2.Enabled:=True;
end;


Slym   (2008-02-06 05:21:00) [2]

if (classname='') then
begin
 form1.Memo2.Lines.Add('['+Datetostr(Date)+'  '+timetostr(Time)+']'+' Ошибка! Пожалуйста вставьте Класс (поле пустое или не имеет класса) !');
  exit;
end else ...


Res   (2008-02-06 02:19:00) [3]


var
 classname:string;
 ai:TTntStrings;
 ainew:TTntStrings;
 int:array[1..10] of integer;
 error:boolean;
begin
error:=False;
classname:=searchclass(form1.Memo1.Text);
if (searchclass(form1.Memo1.Text)='') then
 begin
 form1.Memo2.Lines.Add('['+Datetostr(Date)+'  '+timetostr(Time)+']'+' Ошибка! Пожалуйста вставьте Класс (поле пустое или не имеет класса) !');
 end
else
 begin
 ai:=TTntstringlist.Create; //Создаю
 ainew:=TTntstringlist.Create; //Создаю
 end;
   try
 ai.LoadFromFile(form1.Edit1.Text);
   except
   form1.Memo2.Lines.Add('['+Datetostr(Date)+'  '+timetostr(Time)+']'+' Ошибка! Невозможно открыть файл!');
   error:=True;
   end;
   if error=True then
       begin
       form1.Memo2.Lines.Add('['+Datetostr(Date)+'  '+timetostr(Time)+']'+' Ошибка! Невозможно изменить класс1!');
       end
   else
       begin
       int[1]:=Pos(classname, ai.Text);
       int[2]:=PosEx('class_end', ai.Text, int[1]+1);
               if(int[1]<>0) then
                     begin
                           try
                     ainew.Add(copy(ai.text,1, int[1]-1));
                     ainew.Add(form1.Memo1.Text);
                     ainew.Add(copy(ai.text,int[2]+1, length(ai.Text)));
                     form1.Memo2.Lines.Add('['+Datetostr(Date)+'  '+timetostr(Time)+']'+' Класс успешно заменен!');
                           except
                           form1.Memo2.Lines.Add('['+Datetostr(Date)+'  '+timetostr(Time)+']'+' Ошибка! Невозможно заменить класс2!');
                           end;
       ainew.SaveToFile(form1.Edit1.Text);
       form1.Memo2.Lines.Add('['+Datetostr(Date)+'  '+timetostr(Time)+']'+' Файл успешно сохранен!');
       end
     else
       begin
     form1.Memo2.Lines.Add('['+Datetostr(Date)+'  '+timetostr(Time)+']'+' Ошибка! Класс не найден!3');
       end;
 end;
ai.Free;
ainew.Free;
form1.Button2.Enabled:=True;
end;


Германн   (2008-02-06 01:49:00) [4]


> Res   (06.02.08 01:47)

Без нормального форматирования код не читаем.


Наверх

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