Главная страница
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.12 c
15-1268762686
TStas
2010-03-16 21:04
2010.08.27
Как заставить подпрограмму считать быстрее


15-1265188639
12
2010-02-03 12:17
2010.08.27
Тем, кто работал с Oracle и MSSQL. C чем Вам удобнее показалось?


15-1268851235
NailMan
2010-03-17 21:40
2010.08.27
Кто пользовал электронные книги, нужно посоветоваться


2-1273134658
noob_one
2010-05-06 12:30
2010.08.27
Какой функцией можно перевести "код" в #1050#1086#1076.


15-1269576375
Джони
2010-03-26 07:06
2010.08.27
Командная строка и URL запрос