Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
9-12991
OlegL
2002-12-26 12:15
2003.06.05
TThread и картинка


14-13388
Separator
2003-05-16 20:57
2003.06.05
Встроенный asm


3-12995
cherox
2003-05-15 13:49
2003.06.05
Как выделить кусок записей в RxDbGrid?


3-13083
Ich Hasse
2003-05-17 15:32
2003.06.05
Как выделить ПОСЛЕДНЮЮ запись???


1-13113
Song
2003-05-23 08:38
2003.06.05
TListView, родительский TListItem. vsReport





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский