2013-06-29 13 views
6

w Delphi, jeśli chcesz utworzyć obiekt COM, można to zrobić na dwa sposoby,co jest lepsze pod względem wydajności, wczesne wiązanie lub późnego wiązania w Delphi COM obiektów

pierwszy jest wcześnie wiązania, na przykład,

uses 
    MSScriptControl_TLB; // MS Script Control 

var 
    obj: IScriptControl; 
begin 
    obj := CreateOleObject('ScriptControl') as IScriptControl; 
    .. 
    .. 
    obj.ExecuteStatement('Msgbox 1') 
end; 

Lub, można to zrobić w następujący sposób (późne wiązanie)

var 
    obj: OleVariant; 

begin 
    obj := CreateOleObject('ScriptControl') ; 
    obj.ExecuteStatement('Msgbox 1'); 
end; 

co jest lepsze pod względem wydajności?

+0

Wczesne lub późne wiązanie nie zmienia się, niezależnie od tego, czy wymagane jest podniesienie. Nie można odpowiedzieć "co jest lepsze". Czasami wcześnie wiążą się lepiej, innym razem późno wiążą się lepiej. –

+0

Dziwne, ale faktem jest, że zmieniam od drugiego do pierwszego podejścia, błąd znika. –

+0

i wszystko działało na win7. tak czy inaczej, moje główne pytanie brzmi, który z nich jest lepszy pod względem wydajności –

Odpowiedz

11

Który z nich jest lepszy pod względem wydajności?

Wczesne wiązanie jest szybsze niż późniejsze wiązanie. Metoda późnego wiązania obejmuje:

  1. Wyszukiwanie punktu wejścia od nazwy.
  2. Składanie parametrów przekazywanych do metody i wykonywanie niezbędnych konwersji typów.
  3. Wywołanie funkcji.
  4. Odkładanie dowolnych parametrów wyjściowych i zwracanych.

Wiele z tych kroków nie jest dostępnych dla wczesnej wysyłki wiązanej.

Oczywiście, jeśli funkcja robi cokolwiek znaczącego, wydajność różna podczas wysyłki metody może nie być wykrywalna.

+0

dzięki. to bardzo pomaga! –

+0

Byłoby lepiej, gdybyś mógł edytować pytanie po prostu pytając "który z nich jest lepszy pod względem wydajności?" W obecnej formie pytanie, które pierwotnie zadano, nie pasuje do SO. Ale pytanie, na które odpowiedziałem, jest w porządku. –

+0

@DavidHeffernan - Nie jestem pewien, czy jesteś wystarczająco zaznajomiony z C++ Builder, aby odpowiedzieć na te powiązane q, które wciąż czeka na dobrą odpowiedź ...? http://stackoverflow.com/questions/11670175/late-binding-com-objects-with-cbuilder – Roddy

Powiązane problemy