metody wirtualne niezarzadzane w zarzadzanym c++

0

Mam taki problem:

class IUnmanagedTest
{
public:
virtual void test() = 0;
};

class UnmanagedTest : public IUnmanagedTest
{
public:
virtual void test()
{
};
};

int __clrcall main(array<System::String > args)
{
IUnmanagedTest* t = new UnmanagedTest();
long time = clock();
for(int i = 0; i < 3000000; i++)
{
t->test();
}
Console::WriteLine(clock() - time);
delete t;
Console::ReadLine();
return 0;
};

toto na moim komputerze wykonuje sie okolo 3 sekund, ale jak odpalic to w niezarzadzanym c++ to praktycznie czas jest niemierzalny i tak samo jest jezeli zamienie ta klas i interfajs na klasy managed czyli z ref na poczatku. Generlanie chodzi mi o to dlaczego tak sie dzieje ze predkosc az tak sie różni w przypadku klas niezarzadzanych w zarzadzanym kodzie (tylko dla metod wirtualnych tak jest) ze czas samego wywolania jest taki duzy? Pytam bo mam napisane duzo kodu w niezarzadzanym c++ i jest tam mnostwo metod wirtualnych a chcialem to przeniesc opakowujac do zarzadzanego c++.

0

z prostej przyczyny. masz pusty kod metod i jak kompilator to zauważy (jeśli jest w stanie) to po prostu w kodzie wynikowym ignoruje tą pętlę.

0

To akurat nie od tego zalezy czy metoda jest pusta czy nie.
Podalem przyklad z pusta metoda , zeby bylo prosciej ale jezeli jest tam jakis kod to i tak samo wywolanie w zarzadzabym c++ trwa dlugo, a w niezarzadzanym normalnie.

0

Wysztytałem gdzieś, że takie spowolnienie następuje przez 'managed-unamnaged transition' (podaję oryginalną pisownię, że by nie było niedomówień), ma ktoś jakieś rozwiązanie które pozwalało by to jakoś sprytnie i małym nakładem pracy ominąć?

1 użytkowników online, w tym zalogowanych: 0, gości: 1