If the first parameter of the POs function is Char rather than string, the compiler will first convert Char to string;
From memory structure to management mechanism, string is far more complex than char.
Therefore, there is still room for optimization in the face of this situation (Char to be located) Pos; after optimization, the speed will be increased by about 5 times.
Test:
unit unit1; interfaceuses windows, messages, sysutils, variants, classes, graphics, controls, forms, dialogs, stdctrls; Type tform1 = Class (tform) button1: tbutton; Procedure button1click (Sender: tobject); end; var form1: tform1; implementation {$ R *. DFM} // custom POS function Mypos (C: Char; const STR: string): integer; var I: integer; begin result: = 0; for I: = 1 to length (STR) do if C = STR [I] Then begin result: = I; Exit End; end; {comparison test} procedure tform1.button1click (Sender: tobject ); vaR S: string; C: Char; I: integer; N: Cardinal; begin S: = 'abcdefghijklmnopqrstuvwxy'; randomize; C: = CHR (random (26) + 97 ); {random .. Z character} {use POS function} n: = gettickcount; for I: = 1 to 1000000 do pos (C, S); N: = gettickcount-N; text: = inttostr (n) + '-'; {use the custom Mypos function} n: = gettickcount; for I: = 1 to 1000000 do Mypos (C, S); N: = gettickcount-N; text: = text + inttostr (n); button1.caption: = 'pos and Mypos speed test'; end.