Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.05;
Скачать: CL | DM;

Вниз

Посоветуйте как можно еще оптимизировать кусок кода   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2003.06.05;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.022 c
14-13411
acsoft
2003-05-18 09:42
2003.06.05
Как написать объект так, чтобы потом текст юнита нельзя было проч


3-13030
Ann
2003-05-16 08:43
2003.06.05
Запрос


3-13087
HanIP
2003-05-19 09:14
2003.06.05
EXCEL и БД


1-13237
Андреев Павел
2003-05-23 13:27
2003.06.05
Порядок удаления


6-13345
Puzzle
2003-04-02 12:32
2003.06.05
Как определить, что Dial-up соединение уже установлено?