![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Оптимизация
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)
Без нормального форматирования код не читаем.