2009-09-18 22 views
7

thể trùng lặp:
Extension Method PerformanceChi phí nào được kết hợp với phương pháp mở rộng khi chạy? (NET)

Trong một crunching ứng dụng dữ liệu đó là CPU và/hoặc bộ nhớ truy cập bị ràng buộc, là chi phí của một dòng phương pháp mở rộng đáng chú ý? Liệu nó có cao hơn một cuộc gọi hàm bình thường hay đơn giản là một trình biên dịch/IDE trừu tượng? Ví dụ, chức năng sau đây có bị bệnh không nếu nó được gọi lên trên vài nghìn lần một giây:

public static void WriteElementString(this XmlTextWriter writer, string name, int data) 
{ 
    writer.WriteElementString(name, data.ToString()); 
} 

Trả lời

18

Không có phí. Nó chỉ là một phương thức tĩnh được gọi với cú pháp khác. IL được tạo ra chỉ là một cuộc gọi bình thường.

Nói cách khác, chi phí cho phương pháp mở rộng của bạn là giống hệt nhau cho

writer.WriteElementString(name, data); 

như nếu bạn chỉ cần gọi

XmlWriterExtensions.WriteElementString(writer, name, data); 

... vì IL tạo ra sẽ giống hệt nhau .

Về mặt hiệu suất, "lên trên vài nghìn lần một giây" là không có gì. Các chi phí cho việc có một mức độ bổ sung của stack sẽ hoàn toàn không đáng kể ở mức đó ... ngay cả khi phương pháp này không được inlined, mà tôi tin rằng nó rất có khả năng được trong trường hợp này.

Tuy nhiên, quy tắc hiệu suất bình thường được áp dụng: tất cả đều là phỏng đoán cho đến khi bạn đo được. Hoặc ít nhất, số lần truy cập thực tế là trong trường hợp này là phỏng đoán; các "phương pháp mở rộng chỉ là phương pháp bình thường với cú pháp đường trong trình biên dịch" không phải là phỏng đoán.

3

Không có phí nào cả, nó chỉ là một cú pháp cú pháp, trình biên dịch đơn giản của nó trừu tượng.

+2

đường cú pháp? Hay đây là cách sucralose được tạo ra? –

Các vấn đề liên quan