Xét đoạn mã sau ...Tại sao sử dụng một Func <> để nhanh hơn nhiều so với sử dụng() ràng buộc mới về một tác giả chuỗi generic
Trong các thử nghiệm của tôi cho một CÁO BÁO CHÍ (không gỡ lỗi!) X86 xây dựng trên Windows 7 x64 PC (Intel i7 3GHz) tôi thu được kết quả như sau:
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
có vẻ như rằng việc sử dụng một Func <> để xác định một đại biểu để tạo ra các đối tượng mới là nhanh hơn so với gọi "mới T hơn 6 lần() "trực tiếp.
Tôi thấy điều này hơi bất ngờ ... Tôi đoán đó là do một số nội tuyến được thực hiện bởi Jitter, nhưng tôi đã nghĩ rằng nó sẽ có thể tối ưu hóa "T mới"() cũng giống như vậy.
Có ai có giải thích về điều này không?
Có thể tôi đang phạm một số sai lầm. (Tôi đã xem xét hiệu ứng của bộ thu gom rác có thể có, nhưng sắp xếp lại mã và thêm GC.Collect() và như vậy không thay đổi kết quả đáng kể).
Dù sao, đây là các mã:
Xem https://msmvps.com/blogs/jon_skeet/archive/2011/08/22/optimization-and-generics-part-1-the-new-constraint.aspx –
liên quan: http: // stackoverflow. com/questions/367577/why-does-the-c-sharp-compiler-emit-activator-createinstance-khi-gọi-new-in – nawfal