Một hàm tạo tĩnh được thực hiện lần đầu tiên bạn truy cập một thành viên tĩnh. Biết điều này, tôi có một số câu hỏi:Nhà xây dựng tĩnh có thể giảm hiệu năng truy cập các phương pháp tĩnh không?
- Điều này có nghĩa là mỗi lần tôi truy cập phương pháp tĩnh, thời gian chạy phải kiểm tra xem hàm tạo tĩnh đã được gọi chưa?
- Điều này có ảnh hưởng đến hiệu suất không?
- Các lớp tĩnh "xây dựng ít" có tránh được hiệu suất này không?
[EDIT]: Tôi muốn làm rõ rằng tôi KHÔNG quan tâm đến tối ưu hóa vi mô.
Tôi đang đặt câu hỏi này bởi vì đó là quyết định thiết kế. Nếu một nhà xây dựng tĩnh phát sinh một lần truy cập hiệu suất, thì tôi sẽ thiết kế mã của tôi với ý nghĩ đó và sẽ ý thức hơn về các quyết định có thể ảnh hưởng đến hiệu suất.
Dưới đây là ví dụ minh họa câu hỏi của tôi. Sẽ có lợi ích gì khi sử dụng phương pháp Independent
và đặt nó vào một lớp tĩnh riêng biệt? Bằng cách đó, nó sẽ không phải kiểm tra xem tĩnh Test
đã được khởi tạo hay chưa. [Cập nhật Xem câu trả lời của tôi bên dưới để biết ví dụ tốt hơn, đơn giản hơn].
static class Test {
// Static constructor with dependent method:
static int x;
static Test() { x = 5; }
static int Dependent() { return x; }
// Static, independent method:
static int Independent(int y) { return y+1; }
}
Here's the quote từ C# đặc điểm kỹ thuật về constructor tĩnh:
Việc thực hiện một constructor tĩnh được kích hoạt bởi các đầu tiên của sự kiện sau đây xảy ra trong một miền ứng dụng:
- Một thể hiện của lớp được tạo ra.
- Bất kỳ thành viên tĩnh nào trong lớp đều được tham chiếu.
Có thể trùng lặp: http://stackoverflow.com/questions/2921828/static-constructors-cause-a-performance-over-head –
Tôi đã đọc bài đăng đó, nhưng nó chắc chắn khác với câu hỏi của tôi. Nó so sánh hiệu suất của ** constructor ** ** ** khởi tạo tĩnh **. Tôi quan tâm đến việc biết nếu truy cập một phương thức bị chậm lại bởi một constructor tĩnh. Tôi đọc lại "trùng lặp", bao gồm tất cả các câu trả lời và liên kết, và vẫn không có câu trả lời cho câu hỏi của tôi! –
Tôi nghĩ rằng đó là truy cập trường và không phải trên cuộc gọi phương thức. Nhưng có, có thể có một hiệu suất đáng chú ý giảm trong một số kịch bản. – CodesInChaos