List.Capacity chỉ preallocates bộ nhớ để danh sách có thể phát triển đến giới hạn dung lượng mà không phải chịu thêm phân bổ bộ nhớ và phân mảnh heap liên quan. Thiết lập List.Capacity thành 1000 không làm cho 1000 mục có thể truy cập được. List.Count cho biết kết thúc của nội dung danh sách thực tế. List.Insert() không thể được sử dụng để chèn các mục vượt quá List.Count.
Cách giải quyết của bạn trong việc tạo một mảng 1000 mục và sau đó chuyển sang danh sách chỉ đơn giản là một phím tắt để gọi List.Add() 1000 lần để phân bổ các vị trí trống trong danh sách (đẩy List.Count to 1000). Calling List.Add() 1000 lần là bộ nhớ hiệu quả hơn, vì với kỹ thuật mảng sẽ có 2 bản sao của danh sách trong bộ nhớ (1 cho mảng, và 1 cho danh sách).
Bạn đã giảm giá đề xuất sử dụng Dictionary<int, sometype>
cho mảng thưa bởi vì nó sẽ sử dụng nhiều bộ nhớ hơn mảng thưa dân cư. Điều đó phụ thuộc vào cách dữ liệu của bạn thưa thớt. Nếu bạn chỉ có 100 mục trong phạm vi chỉ mục là 0..1000, bạn có mật độ 10%. Bạn cũng có thể gọi 90% bộ nhớ bị lãng phí đó.
Một từ điển gần như chắc chắn sẽ có nhiều bộ nhớ hiệu quả hơn cho mảng thưa mật độ thấp hơn phân bổ một mảng 1000 mục nhưng chỉ sử dụng 100 trong số các vị trí. Tôi không biết chi tiết cụ thể về việc sử dụng bộ nhớ hoặc sử dụng bộ nhớ của từ điển, nhưng có thể đoán là nếu mật độ mảng thưa thớt của bạn là 50% hoặc cao hơn, sử dụng mảng thay vì từ điển giành được cho bộ nhớ và tốc độ.
Không thể thực hiện, sử dụng phương thức Add(). –
Nếu đó là một danh sách thưa thớt (chẳng hạn như 10,20 mục nằm rải rác trong phạm vi 1000), bạn có thể thực sự đang tìm kiếm một 'Từ điển' thay vì một Danh sách. –
@ssg Yup nó là một danh sách thưa thớt. Sử dụng Dictionary là một gợi ý tốt. Nhưng sau đó tôi sẽ sử dụng nhiều không gian hơn. Bất cứ điều gì đơn giản hơn? – user1041086