2009-08-13 32 views
10

Tôi muốn biết liệu việc sử dụng các thuộc tính trong .Net, cụ thể là C#, có đắt không, và tại sao hoặc tại sao không?Việc sử dụng các thuộc tính này trong .Net (C#) có đắt không?

Tôi hỏi về C# cụ thể, trừ khi không có sự khác biệt giữa các ngôn ngữ khác nhau .Net (vì các thư viện lớp cơ sở là giống nhau?).

Tất cả các công nghệ .Net mới hơn sử dụng rộng rãi các thuộc tính, chẳng hạn như LINQ to SQL, ASP.Net MVC, WCF, Thư viện doanh nghiệp, v.v ... và tôi đã tự hỏi điều này có ảnh hưởng gì đến hiệu suất. Rất nhiều các lớp được tự động trang trí với một số Thuộc tính, hoặc các thuộc tính này được yêu cầu cho một số chức năng/tính năng nhất định.

Câu hỏi về chi phí có phụ thuộc vào chi tiết triển khai cụ thể không? Thuộc tính được biên dịch sang IL như thế nào? Chúng được lưu trữ tự động, hoặc là điều này lên đến người triển khai?

+3

Không có sự khác biệt giữa bất kỳ ngôn ngữ .NET nào chạy khỏi CLR. Không chắc chắn cách DLR phù hợp với hình ảnh, nhưng một khi đã biên dịch, C# và VB.NET (và bất kỳ ngôn ngữ CLR nào khác) giống nhau. –

Trả lời

19

"Cách sử dụng thuộc tính" quá mơ hồ. Tìm nạp các thuộc tính là hoạt động phản chiếu hiệu quả - bạn sẽ không muốn thường xuyên thực hiện nó trong vòng lặp - nhưng chúng không đắt tiền để bao gồm trong siêu dữ liệu và mẫu sử dụng điển hình (IMO) là xây dựng một số biểu diễn khác (ví dụ: một lược đồ trong bộ nhớ) sau khi đọc các thuộc tính một lần.

Cũng có thể có một số bộ nhớ đệm có liên quan, nhưng có lẽ tôi sẽ nhớ cache biểu diễn khác. Ví dụ: nếu tôi đã trang trí các giá trị enum với mô tả, tôi thường tìm nạp các thuộc tính sau khi để tạo chuỗi từ điển enum (hoặc ngược lại).

+0

Bạn có nghĩ rằng một cách an toàn có thể giả định rằng các thuộc tính (hoặc một số đại diện của chúng) là một phần của .Net BCL và các khung công tác/bổ sung khác của Microsoft, được lưu trữ không? –

+1

Một lần nữa, đó là một chút mơ hồ. Nếu bạn có thể đưa ra một ví dụ rất cụ thể và làm thế nào để xác định xem chúng có được lưu trữ hay không, đó sẽ là một câu hỏi hợp lý hơn để trả lời. –

6

Tùy thuộc vào cách bạn sử dụng chúng ... Một số thuộc tính chỉ dành cho mục đích thông tin (ví dụ: thuộc tính ObsoleteAttribute), vì vậy chúng không có bất kỳ tác động nào đến hiệu năng thời gian chạy. Các thuộc tính khác được sử dụng bởi trình biên dịch (như DllImportAttribute) hoặc bởi các trình biên dịch sau như PostSharp, vì vậy chi phí là lúc biên dịch, không phải thời gian chạy. Tuy nhiên, nếu bạn sử dụng sự phản chiếu để kiểm tra các thuộc tính trong thời gian chạy, nó có thể tốn kém.

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