Niedawno wykonałem pomiary wydajności na List<>
vs []
dla tablicy małych struktur. System.Array wydawał się wygrywać z rękami, więc poszedłem z tym.Czy System.Array wykonuje boks na wartości typów, czy nie?
Dopiero co przyszło mi do głowy, że System.Array zawiera typy obiektów, więc na pewno wypełnienie go strukturami może spowodować boksowanie?
Jednak the MSDN entry for System.Array stany:
W wersji .NET Framework 2.0, klasa Array implementuje
System.Collections.Generic.IList<T>
,System.Collections.Generic.ICollection<T>
iSystem.Collections.Generic.IEnumerable<T>
interfejsy generyczne. Implementacje są dostarczane do tablic w czasie wykonywania, a zatem są niewidoczne dla narzędzi do budowania dokumentacji. W wyniku tego ogólne interfejsy nie pojawiają się w składni deklaracji dla klasy Array i nie ma tematów odniesienia dla elementów interfejsu, które są dostępne pod warunkiem, że są dostępne tylko poprzez rzutowanie tablicy na ogólny interfejs typu (jawne implementacje interfejsu) .
Czy to oznacza, że boks nie występuje mimo wszystko? (I wyjaśniłoby to moje wyniki wydajności)
W celu wyjaśnienia twoich wyników wydajności prawdopodobnie powinniśmy zobaczyć kod użyty do pomiaru wydajności. – Snowbear