Форум: "WinAPI";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];
ВнизПосоветуйте как можно еще оптимизировать кусок кода Найти похожие ветки
← →
DVM (2003-04-07 10:15) [0]Пишется некоторая программа на WinApi. Требуется создать EXE файл минимального размера.
В этой программе ведется лог файл ее работы следующим образом:
procedure PrintLog(LogMessage:Pchar);
function StrLen(const Str: PChar): Cardinal; assembler;
asm
MOV EDX,EDI
MOV EDI,EAX
MOV ECX,0FFFFFFFFH
XOR AL,AL
REPNE SCASB
MOV EAX,0FFFFFFFEH
SUB EAX,ECX
MOV EDI,EDX
end;
const
szLogFileName : array[0..9] of char = "file.log"#0;
NewRow : array [0..1] of char = #10#13;
var
hLogFile: THandle;
RetLength:Cardinal;
begin
hLogFile := CreateFile(szLogFileName,
GENERIC_WRITE,
FILE_SHARE_READ,
0,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
0);
if hLogFile = INVALID_HANDLE_VALUE then
begin
MessageBox (0, "Error!", "Error!", MB_OK);
exit;
end;
try
SetFilePointer(hLogFile, 0, 0, FILE_END);
WriteFile(hLogFile, LogMessage^, StrLen(LogMessage), RetLength, 0);
WriteFile(hLogFile, NewRow, SizeOf(char)*2, RetLength, 0);
finally
CloseHandle(hLogFile);
end;
end;
Использовать SysUtils не могу, так он увеличивает размер программы на 40(!) кб. Стандартными процедурами Pascal для работы с текстовыми файлами пользоваться не могу по той же причине (+8 кб к размеру).
По этой причине функция StrLen перенесена из SysUtils.
Можно ли как еще оптимизировать эту процедуру? Что посоветуете?
Переписал бы все на ASM-е, но не знаю я его.
← →
Polevi (2003-04-07 20:35) [1]на C пробовал ?
← →
Morfein (2003-04-07 20:39) [2]ASM, как здесь уже говорилось недавно, это не панацея!!!
Во-первых, StrLen можно заменить на lstrlen из kernel32.dll.
Во-вторых, try-finally выкинуть... данные функции WinApi не генерирует исключений...
В-третьих, вместо szLogFileName, наверное, надо-таки использовать "FILE.LOG". :)
В-четвёртых, вместо отдельной записи в файл разделителя #13#10, лучше использовать lstrcat(LogMessage, pchar(#13#10)) + WriteFile(..., LogMessage^, ...);
← →
DVM (2003-04-07 20:42) [3]А что на C код меньше получается? Исходник короче это да. А экзешник?
← →
Morfein (2003-04-07 21:01) [4]А exe больше...
← →
DVM (2003-04-07 21:02) [5]
> Morfein
Спасибо за рацпредложения :)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.009 c