Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

KOL Format/wvsprintf performance hit   Найти похожие ветки 

 
Freeman ©   (2008-07-14 02:59) [0]

function Format(const Fmt: string; const Args: array of const): string;
asm
       PUSH    ESI
       PUSH    EDI
       PUSH    EBX
       MOV     EBX, ESP
       ADD     ESP, -2048
       MOV     ESI, ESP

       INC     ECX
       JZ      @@2
@@1:
       MOV     EDI, [EDX + ECX*8 - 8]
       PUSH    EDI
       LOOP    @@1
@@2:
       PUSH    ESP
       PUSH    EAX
       PUSH    ESI

       CALL    wvsprintf

       MOV     EDX, ESI
       MOV     ECX, EAX                   // by Freeman
       MOV     EAX, @Result
       CALL    System.@LStrFromPCharLen   // by Freeman, performance hit

       MOV     ESP, EBX
       POP     EBX
       POP     EDI
       POP     ESI
end;


 
Thaddy   (2008-07-14 11:48) [1]

Not really strange:

I suppose you are using the unicode version of wvsprintf?
In that case you should call LStrFromPWCharLen.
Otherwise you get a performance hit because the unicodestring gets converted to string in the background by the OS.

Also it is a good idea to use kolstring instead of string.


 
Freeman ©   (2008-07-15 02:34) [2]

He-he. In my project (not KOL-based) I"m using these snippets:

function FormatBuf(Fmt: PAnsiChar; Args: array of const; Buf: PAnsiChar): Integer;
asm
       PUSH    EDI

       INC     ECX
       JZ      @@2
@@1:
       MOV     EDI, [EDX + ECX*8 - 8]
       PUSH    EDI
       LOOP    @@1
@@2:
       PUSH    ESP
       PUSH    EAX
       MOV     EDI, Buf
       PUSH    EDI
       CALL    wvsprintfA

       POP     EDI
end;

function WideFormatBuf(Fmt: PWideChar; Args: array of const; Buf: PWideChar): Integer;
asm
       PUSH    EDI

       INC     ECX
       JZ      @@2
@@1:
       MOV     EDI, [EDX + ECX*8 - 8]
       PUSH    EDI
       LOOP    @@1
@@2:
       PUSH    ESP
       PUSH    EAX
       MOV     EDI, Buf
       PUSH    EDI
       CALL    wvsprintfW

       POP     EDI
end;


 
Thaddy   (2008-07-21 17:38) [3]

This would be a start to work with kol strings.

function FormatBuf(Fmt: PAnsiChar; Args: array of const; Buf: PAnsiChar): Integer;overload;
asm
      PUSH    EDI

      INC     ECX
      JZ      @@2
@@1:
      MOV     EDI, [EDX + ECX*8 - 8]
      PUSH    EDI
      LOOP    @@1
@@2:
      PUSH    ESP
      PUSH    EAX
      MOV     EDI, Buf
      PUSH    EDI
      CALL    wvsprintfA

      POP     EDI
end;

function FormatBuf(Fmt: PWideChar; Args: array of const; Buf: PWideChar): Integer;overload;
asm
      PUSH    EDI

      INC     ECX
      JZ      @@2
@@1:
      MOV     EDI, [EDX + ECX*8 - 8]
      PUSH    EDI
      LOOP    @@1
@@2:
      PUSH    ESP
      PUSH    EAX
      MOV     EDI, Buf
      PUSH    EDI
      CALL    wvsprintfW

      POP     EDI
end;



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.065 c
2-1272953338
Беликов А.А
2010-05-04 10:08
2010.08.27
Конвертация TBitmap в TGPBitmap


8-1205173351
Ramzes001
2008-03-10 21:22
2010.08.27
Помогите!


6-1219129924
Michael
2008-08-19 11:12
2010.08.27
Как проверить наличие файла на FTP


15-1269080805
tippa
2010-03-20 13:26
2010.08.27
английский и программирование


2-1265790561
fford
2010-02-10 11:29
2010.08.27
spliter переносится за панель





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский