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

Вниз

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

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

Наверх




Память: 0.48 MB
Время: 0.134 c
15-1270016502
Alkid
2010-03-31 10:21
2010.08.27
Тонкий стёб над С++


8-1202991381
Jimmy
2008-02-14 15:16
2010.08.27
Сохранение в psd


4-1235851954
Тыщ
2009-02-28 23:12
2010.08.27
Запустил раз — включилось, запустил второй — выключилось


15-1266096606
Юрий
2010-02-14 00:30
2010.08.27
С днем рождения ! 14 февраля 2010 воскресенье


4-1233489021
Vemer
2009-02-01 14:50
2010.08.27
Рисунок не хочет прикреплятся к Popup Меню.