Der verwaltete Rückruf wird viel langsamer verwaltet, wenn sich das Ziel in einer anderen Anwendungsdomäne befindet

8

Ich rufe verwalteten Code aus nicht verwaltetem Code mit einem Delegaten auf. Wenn ich verwalteten Code in der Standard-AppDomain anrufe, messen wir durchschnittlich 5,4ns pro Anruf. Wenn ich zu einer zweiten AppDomain anrufe, messe ich 194ns pro Anruf. (Standard VS2017 x86 Release-Konfiguration, nicht unter dem Debugger ausgeführt).

Warum ist die Leistung beim Aufruf einer AppDomain, die nicht die Standardeinstellung ist, so viel niedriger? Da ich von der nicht verwalteten Seite komme, die AppDomains nicht kennt, würde ich erwarten, direkt in die Zieldomäne zu gelangen. Der Leistungshit würde jedoch implizieren, dass der Delegat in die Standarddomäne aufruft und dann zum eigentlichen Ziel marshallt. Ich sehe UM2MDoADCallBack beim Durchlaufen der Disassemblierung. Was erscheint unter WrongAppDomain: in UMThunkStub.asm

Wie kann ich dieses unnötige Marshalling verhindern und direkt in eine bestimmte AppDomain aufrufen?

Der Code, mit dem ich das teste, ist unten.

%Vor%     
Adam 01.04.2017, 04:37
quelle

0 Antworten

Tags und Links