2010-03-24 23 views
8

Tôi đọc hướng dẫn từ web về C# thuộc tính và siêu dữ liệu. Nó rất tuyệt nhưng tôi tự hỏi ý nghĩa của nó.C# Thuộc tính và hàm ý siêu dữ liệu

  1. Thuộc tính (tùy chỉnh) có được nạp khi lắp ráp được tải không? hoặc là nó chỉ khi bạn sử dụng phản ánh để lấy các siêu dữ liệu?

  2. Có vẻ như các thuộc tính thêm vào tổng kích thước mã vì nó được biên dịch trong tệp thực thi? Thê nay đung không?

  3. Có thể có thuộc tính thời gian biên dịch không? I E. thuộc tính sẽ chỉ được áp dụng nếu DEBUG được xác định?

Tôi biết một là để làm như thế này:

#if DEBUG 
[MyCustomAttribute] 
#endif 

Nhưng tôi tự hỏi, nếu có cách nào tốt hơn?

  1. Có hiệu suất/bộ nhớ báo trước khi sử dụng nhiều thuộc tính không? Nền tảng mục tiêu của tôi sẽ là Xbox 360 (sử dụng C#/XNA).

Cảm ơn!

-Stephanus

Trả lời

6

Có hai phần thuộc tính, mã của chúng và đối số hàm tạo và dữ liệu thuộc tính của chúng. Mã được lưu trữ trong IL của hội đồng, dữ liệu được lưu trữ trong siêu dữ liệu lắp ráp. Nếu một thuộc tính không được sử dụng, nó chỉ chiếm một số không gian bộ nhớ ảo nhưng không yêu cầu bất kỳ tài nguyên máy nào.

Không có gì xảy ra cho đến khi bạn sử dụng phương thức GetCustomAttributes(). Sau đó, mã cho lớp thuộc tính chỉ được biên dịch trong thời gian, giống như mã thông thường trong assembly của bạn. Và hàm tạo và các bộ định vị thuộc tính được gọi, sử dụng dữ liệu thuộc tính trong siêu dữ liệu.Bạn sẽ sử dụng một số RAM cho cả khi trình quản lý bộ nhớ ánh xạ mã IL, mã máy và các trang siêu dữ liệu.

4

1) Thuộc tính AFAIK được khởi tạo chậm, nhưng chúng đi kèm với lắp ráp vào bộ nhớ.
2) Không phải bất cứ nơi nào gần đủ để lo lắng. Knuth, v.v.
3) Có.

Sử dụng các thuộc tính có nghĩa là sử dụng sự phản chiếu, xếp hạng trong số một số điều chậm nhất bạn có thể thực hiện trong khung công tác. Nhưng sau đó, nó có quá chậm cho ứng dụng của bạn không? Nếu không biết bạn đang làm gì, hãy để một mình những gì bạn cần làm trong vòng bao nhiêu mili giây, không ai có thể cung cấp cho bạn câu trả lời có hoặc không cho điều này.

Điều tốt nhất là tạo một mẫu thử nghiệm và xem IRL của nó như thế nào. Một lần nữa, Knuth, v.v.

3
  1. Thuộc tính được tải khi lắp ráp được tải. Chúng là một phần của thông tin loại, do đó, được tải với các loại tự động.
  2. Có một chi phí (rất nhỏ) về quy mô lắp ráp với các thuộc tính. Tuy nhiên, điều này là rất nhỏ, và không phải cái gì mà tôi muốn được quan tâm.
  3. Bạn có thể làm điều này, nhưng chỉ theo cách bạn hiển thị.
  4. Không có tác động hiệu suất của việc có thuộc tính. Chúng được bỏ qua trong thời gian chạy trừ khi sự phản chiếu được sử dụng để truy vấn một cách rõ ràng các thuộc tính.
Các vấn đề liên quan