Jeśli potrzebujecie przechować jakieś dane np. w cache to najpierw je trzeba pobrać i gdzieś umieścić. Przedstawię mały trick. Większość programistów c# (dane wzięte z kosmosu, ale się domyślam, że tak jest) przechwycone dane zapisuje jako klasę by następnie przechowywać je w jakiejś strukturze danych (lista, słownik, tablica). To w większości przypadków jest OK, lecz wyobraźmy sobie, że mamy do zainicjowania kolekcję złożoną z baaaaaaardzo wielu elementów a zależy nam bardzo na szybkości inicjalizacji. Więc zamiast robić:
Enumerable.Range(0, 10000000).ToDictionary(k => k, v => new X(123));
gdzie X jest klasą
wystarczy utworzyć strukturę
struct Y
{
public int Val;
public Y(int val) {
Val = val;
}
}
Enumerable.Range(0, 10000000).ToDictionary(k => k, v => new Y(123));
U mnie wzrost wydajnościowy jest niemal 3-4 krotny.
ps oczywiście tytuł jest trochę mylący bowiem struktura (Struct) nie jest obiektem!
Brak komentarzy:
Prześlij komentarz