Khi nào, nếu bao giờ, sẽ nhanh hơn khi chuyển đối số làm đối số cho phương thức tĩnh thay vì có phương thức không tĩnh và truy cập cùng các giá trị thông qua các thành viên cá thể. Giả sử phương thức truy cập các thành viên này theo kiểu chỉ đọc.Có thể làm cho một phương pháp tĩnh cải thiện hiệu suất, và trong hoàn cảnh nào?
Tất cả những thứ khác bằng nhau, gọi phương thức tĩnh là slightly faster hơn gọi phương thức thể hiện.
Tất cả những thứ khác bằng nhau, gọi phương thức không có đối số nhanh hơn một chút so với cách gọi một đối số.
xem xét:
private Thing _thing;
void DoTheThing()
{
_thing.DoIt();
}
so với mã tương đương này:
private Thing _thing;
// caller's responsibility to pass "_thing"
static void DoTheThing(Thing thing)
{
thing.DoIt();
}
Tôi không thể nghĩ ra một tình huống thực tế mà loại này tối ưu hóa thực sự sẽ thêm bất kỳ giá trị, mà là một thử nghiệm suy nghĩ (cho những người thích thảo luận về loại điều này), có thực sự là một lợi ích, và nếu như vậy thì có bao nhiêu đối số (của những loại vv) tip sự cân bằng theo cách khác?
Có yếu tố nào khác phát sinh khi xem xét điều này không? Phương pháp tĩnh truy cập _thing
dưới dạng biến địa phương thay vì một trường, chẳng hạn.
+1 Câu hỏi hay. Khi bạn chạy mã phân tích trên mã của bạn trong VS bạn nhận được lỗi CA1822 nếu phương pháp của bạn trong lớp học của bạn có thể được đánh dấu là tĩnh. Nó luôn làm tôi khó chịu, và tôi thực sự tự hỏi liệu có bất kỳ lợi ích nào không. – BFree
@BFree - nếu bạn theo liên kết tôi đưa vào câu hỏi, bạn có thể thấy rằng việc gọi phương thức tĩnh nhanh hơn một chút. Trong IL, người gọi không phải đẩy một tham chiếu đến đích vào ngăn xếp (JIT có thể hủy bỏ điều này), và EE không phải kiểm tra mục tiêu này về tính vô hiệu. –
Có, có hiệu suất đạt được, nhưng bạn không có khả năng nhìn thấy nó cho đến khi bạn đang gọi phương thức trong một vòng lặp cho hàng trăm ngàn lần. Tối ưu hóa sớm. –