Tất nhiên bạn có thể chắc chắn vì đó là documented. Là trình biên dịch mà giải quyết nó tại thời gian biên dịch, do đó, không có thêm chi phí trên gọi các chức năng quá tải trong Delphi.
[Chỉnh sửa]
Tôi đã làm một thử nghiệm nhỏ dành cho bạn:
var
j: Integer;
st: string;
procedure DoNothing(i: Integer); overload;
begin
j := i;
end;
procedure DoNothing(s: string); overload;
begin
st := s;
end;
procedure DoNothingI(i: integer);
begin
j := i;
end;
procedure TForm2.Button1Click(Sender: TObject);
const
MaxIterations = 10000000;
var
StartTick, EndTick: Cardinal;
I: Integer;
begin
StartTick := GetTickCount;
for I := 0 to MaxIterations - 1 do
DoNothing(I);
EndTick := GetTickCount;
Label1.Caption := Format('Overlaod ellapsed ticks: %d [j:%d]', [EndTick - StartTick, j]);
StartTick := GetTickCount;
for I := 0 to MaxIterations - 1 do
DoNothingI(I);
EndTick := GetTickCount;
Label1.Caption := Format('%s'#13'Normal ellapsed ticks: %d [j:%d]', [Label1.Caption, EndTick - StartTick, j]);
end;
Kết quả: Hầu như tất cả các thời gian 31 Bọ ve (mili giây) cho cả trên máy dev của tôi, đôi khi quá tải chỉ mất 16 ve .
+1 bạn đánh bại tôi với nó :) –
Phải. Có một lượng không đáng kể thời gian biên dịch, nhưng không có thời gian chạy. –
Mã được biên dịch không quan tâm đến tên mà là địa chỉ của thủ tục đúng để gọi. Vì tên dịch này => địa chỉ được thực hiện tại thời gian biên dịch, cuối cùng, vào thời gian chạy, nó chính xác giống như có các tên khác nhau. –