2012-01-10 7 views
9

Mam aplikację, która dziś używa podstawowej refleksji, aby pobrać klasy.Czy Type.GetType() spowolni w zależności od rozmiaru i złożoności obiektu, który pobierasz?

Type type = Type.GetType(mynamespace.myclassname); 
object o = System.Activator.CreateInstance(type); 

Chciałem zobaczyć, jak skuteczne odbicie biegł więc generowane około 150 tysięcy obiektów w taki sposób, aby sprawdzić, czy wydajność kiedykolwiek zdegradowany i występ był szybki i stabilny.

Jednak to mnie do myślenia: Czy wywołanie Type.GetType() rzeczywiście spowalnia w zależności od wielkości i złożoności klasy przekazywane do metody GetType()?

Na przykład: Powiedzmy, że chcieliśmy użyć metody GetType() w celu pobrania złożonej klasy składającej się z 30 zmiennych prywatnych, 30 metod prywatnych i 30 metod publicznych w porównaniu do klasy, która ma tylko jedno bardzo proste publiczne dodawanie (int, int) metoda, która podsumowuje dwie liczby.

Czy Type.GetType zwolniłby znacząco, jeśli przekazywana klasa jest klasą złożoną, a nie prostą?

dzięki

+1

'GetType()' lub 'CreateInstance()'? –

+0

Wierzę, że GetType jest rozwiązywany w czasie kompilacji, a CreateInstance używa metadanych, więc nie ma żadnych iteracji nad właściwościami klasy, jak się wydaje sugerować. Czy ktoś może to potwierdzić? (Przy okazji przegłosowałem, a nie głosowanie w dół, jako interesujące pytanie). – Lloyd

+0

Przykro mi z powodu jakichkolwiek zamieszania w moim tekście powyżej. Odnoszę się konkretnie do wywołania metody GetType() przed każdą instancją przez System.Activator.CreateInstance(). Dziękuję – Matt

Odpowiedz

6

Według mojego rozumienia rzeczy, (a ja jestem tylko skromnym doświadczony programista, nie jestem twórcą języka, lub CLR,) złożoność klasy, o której mowa w żaden sposób nie wpływa na wydajność GetType(). Złożoność instancji klasy będzie oczywiście wpływać na wydajność CreateInstance(), ale można się tego spodziewać: im większa klasa, tym więcej rzeczy zawiera, tym więcej kodu będzie trzeba wykonać, aby ją w pełni skonstruować.

Być może wprowadzasz w błąd GetType() z CreateInstance(), ponieważ zauważam, że mówisz "Czy Type.GetType spowalnia znacznie podczas tworzenia klasy złożonej w porównaniu do prostej klasy?" podczas gdy w rzeczywistości GetType() nie tworzy niczego.

4

Po załadowaniu typu tworzona jest instancja obiektu typu Dopasowanie do typu. Ten (jednorazowy) proces będzie oczywiście mniej lub bardziej kosztowny w zależności od implementacji typu.

Po tym wywołaniu funkcji GetType() można uzyskać odwołanie do tej łatwo przygotowanej instancji, a zatem nie będzie ona ulegać degresji w czasie lub złożoności.

Powiązane problemy