Xamarin.Mac registrar
W tym dokumencie opisano przeznaczenie platformy Xamarin.Mac registrar i jej różnych konfiguracji użycia.
Omówienie
Platforma Xamarin.Mac łączy lukę między środowiskiem uruchomieniowym zarządzanym (.NET) i środowiskiem uruchomieniowym cocoa, umożliwiając klasom zarządzanym wywoływanie niezarządzanych Objective-C klas i wywoływanie ich z powrotem w przypadku wystąpienia zdarzeń. Praca wymagana do preformowania tego "magicznego" jest obsługiwana przez registrar element i jest ogólnie ukryta przed widokiem.
Istnieją wpływ na wydajność tej rejestracji, w szczególności na czas uruchamiania aplikacji i zrozumienie, co dzieje się "pod maską", czasami może być pomocne.
Konfiguracje
registrarZasadniczo zadanie podczas uruchamiania można rozdzielić na dwie katagorie:
- Skanuj każdą klasę zarządzaną dla tych, którzy pochodzą z obiektu NSObject, i zbierz listę elementów, które mają być widoczne dla Objective-C środowiska uruchomieniowego.
- Zarejestruj te informacje w środowisku uruchomieniowym Objective-C .
Z biegiem czasu utworzono trzy różne registrar konfiguracje, aby uwzględnić różne przypadki użycia. Każda z nich ma inne konsekwencje kompilacji i czasu wykonywania:
- Dynamiczny registrar — podczas uruchamiania użyj odbicia platformy .NET, aby skanować każdy załadowany typ, określić listę odpowiednich elementów i poinformować środowisko uruchomieniowe natywne. Ta opcja dodaje zero czasu do kompilacji, ale jest bardzo kosztowna do obliczeń podczas uruchamiania (do wielu sekund).
- Statyczne registrar — podczas kompilacji oblicz zestaw elementów, które mają być zarejestrowane, i wygeneruj Objective-C kod do obsługi rejestracji. Ten kod jest wywoływany podczas uruchamiania, aby szybko zarejestrować wszystkie elementy. Dodaje znaczącą przerwę w kompilacji, ale może skrócić czas od uruchomienia aplikacji.
- "Częściowe" statyczne — nowsze podejście "hybrydowe", które przynosi większość zalet obu tych elementów. Ponieważ eksporty z Xamarin.Mac.dll są stałe, zapisz wstępnie skompilowaną bibliotekę, aby obsłużyć rejestrację i połączyć je. Użyj odbicia, aby obsłużyć biblioteki użytkowników, ale ponieważ biblioteki użytkowników eksportują znacznie mniej typów, które powiązania platformy są często dość szybkie. Zaniedbany wpływ czasu kompilacji i zmniejsza zdecydowaną większość "kosztów" dynamicznych.
Dzisiaj częściowa statyczna jest wartością domyślną dla konfiguracji debugowania, a statyczna jest wartością domyślną dla konfiguracji wydania.
Istnieją pewne scenariusze:
- Wtyczki ładowane po uruchomieniu z klasami pochodzącymi z obiektu NSObject
- Dynamicznie tworzone wystąpienia klas pochodzące z obiektu NSObject
gdzie nie registrar jest w stanie wiedzieć, że musi zarejestrować jakiś typ na początku. Metoda ObjCRuntime.Runtime.RegisterAssembly
jest udostępniana w celu poinformowania registrar o tym, że ma dodatkowe typy do rozważenia.