Giả Tôi tuyên bố một danh sách chung chứa các giá trị của một cấu trúc kiểu:Trong C#, các giá trị trong danh sách có được liệt kê là <struct> không?
struct MyStruct {
public MyStruct(int val1, decimal val2) : this() {
Val1 = val1;
Val2 = val2;
}
public int Val1 {get; private set;}
public decimal Val2 {get; private set;}
}
List<MyStruct> list;
Liệu Danh mục <> cửa hàng mỗi giá trị cá nhân như một cấu trúc đóng hộp, phân bổ riêng trên heap? Hay thông minh hơn thế?
Có gì "và sau khoảng 500 phần tử danh sách được tạo, bộ nhớ được lưu không phải là phần tử danh sách quyền anh hùng lớn hơn bộ nhớ được sử dụng để tạo lớp triển khai" nghĩa là gì? Có một số loại bất lợi? –
@MarsonMao Không có bất lợi. Nói cách khác, nó có nghĩa là nếu một danh sách là ngu ngốc và nó đã làm cấu trúc hộp, sau đó bộ nhớ được sử dụng bởi danh sách sẽ tăng gấp đôi ở khoảng 500 yếu tố. Vì nó không có cấu trúc hộp, thì bộ nhớ được sử dụng bởi 500 phần tử sẽ nhỏ hơn đáng kể so với nếu nó có. –
@Marson Mao Generics trong C# không giống như C++, chúng không phải lúc nào cũng tạo mã cho từng loại duy nhất. Đối với các loại tham chiếu, chúng sẽ sử dụng cùng một mã cơ bản vì kích thước của con trỏ không thay đổi với kiểu tham chiếu. Nhưng đối với các loại giá trị, kích thước khác nhau nên phiên bản Danh sách phải được tạo duy nhất, điều này có chi phí bộ nhớ vì có nghĩa là bây giờ có một bản sao khác của mã danh sách . Xin lỗi nếu tôi không rõ ràng. Xem https://msdn.microsoft.com/en-us/library/f4a6ta2h.aspx –