Rozważmy następujący kod ...Dlaczego używa Func <> więc znacznie szybciej niż przy użyciu nowego() ograniczenie na rodzajowy sekwencji twórcy
W moich testów na RELEASE (nie debugowania!) Zbudować na x86 Windows 7 x64 PC (Intel i7 3GHz) I uzyskano następujące wyniki:
CreateSequence() with new() took 00:00:00.9158071
CreateSequence() with creator() took 00:00:00.1383482
CreateSequence() with new() took 00:00:00.9198317
CreateSequence() with creator() took 00:00:00.1372920
CreateSequence() with new() took 00:00:00.9340462
CreateSequence() with creator() took 00:00:00.1447375
CreateSequence() with new() took 00:00:00.9344077
CreateSequence() with creator() took 00:00:00.1365162
wydaje się, że przy użyciu Func <> zdefiniować delegata do tworzenia nowych obiektów jest więcej niż 6 razy szybciej niż powołanie „nowej T() "bezpośrednio.
Uważam, że jest to trochę nieoczekiwane ... Myślę, że jest to spowodowane wprowadzeniem przez Jittera inline, ale pomyślałem, że byłby w stanie zoptymalizować "nowy T()" równie dobrze.
Czy ktoś ma wyjaśnienie tego?
Może popełniam jakiś błąd. (Rozważyłem efekt, jaki może mieć garbage collector, ale przeorganizowanie kodu i dodanie GC.Collect() i tak dalej nie zmienia znacząco wyników).
W każdym razie, oto kod:
Zobacz https://msmvps.com/blogs/jon_skeet/archive/2011/08/22/optimization-and-generics-part-1-the-new-constraint.aspx –
powiązane: http: // stackoverflow. com/questions/367577/why-does-the-c-sharp-compiler-emit-activator-createinstance-when-calling-new-in – nawfal