haword писал(а):может все таки не до оптимизировал?
Естественно, не дооптимизировал. Ибо дооптимизировать "до конца" будет означать переписать заново.
К примеру вот мы считываем строку и парсим, получаем первый параметр (C#):
- Код: Выделить всё
while ((s = sr.ReadLine()) != null)
{
string[] sp = s.Split('t');
if (sp.Length < 11)
{
++Errors;
continue;
}
uint unixdate;
try
{
unixdate = uint.Parse(sp[0]);
}
catch (Exception e)
{
++Errors;
continue;
}
Вот переведенное:
- Код: Выделить всё
sp:=TStringList.Create;
while not eof(sr) do begin
readln(sr,s);
spl:=ParsingWithTabsSpaces(s,sp);
if (spl < 11) then begin
inc(Errors);
continue;
end;
unixdate:=StrToIntDef(sp.Strings[0],0);
if (unixdate=0) then begin
inc(Errors);
continue;
end;
...Которое вместо обсосанного всячески рунтайма .net framework применяет вот такое вот самоделко:
- Код: Выделить всё
function ParsingWithTabsSpaces(Var s:string; var sl:TStringList):integer;
Var s1:string;
so:string;
i:integer;
begin
Result:=0;
sl.Clear;
so:=s;
while true do begin
so:=TrimLeft(so);
if (so='') then break;
s1:='';
i:=1;
while(true) do begin
if not (so[i] in [#9,#32]) then
begin
s1+=so[i];
if (i<>length(so)) then begin inc(i); continue; end;
end;
so:=Copy(so,i+1,256);
inc(i);
break;
end;
sl.Add(s1);
inc(Result);
end;
end;
Добавлено спустя 6 минут 5 секунд:
Для корректного сравнения по скорости, конечно, нужен сравниваемый код приводимый один к другому более адекватно.
Ну так оригинал то особо тоже не оптимизировался - сваян быстренько для получения результатов и работает. На стандартных средствах, подчеркиваю. А в переводе что ни строка, то buttheard - еще и надо крепко призадуматься, как это сделать - средств библиотек нет, то что есть - архаично-корявое. Вплоть до того (не задумывались кстати?) что у функций разный порядок следования аргументов. Это я про POS.

Добавлено спустя 3 минуты 47 секунд:
Я сейчас ради спортивного интереса занялся переводом этого самого на С++. Любопытно, какие показатели окажутся там. Уже вылавливаю очередной unhandled exception, созданный где-то вне моего кода при завершении программы.

Жесть вообще. У этой реализации приходится вообще менять логику работы из-за гениальной реализации STL