Đây là tình huống:
Tôi có danh sách các chuỗi cửa hàng thực sự là số và có thể trở nên khá lớn (hàng trăm triệu mặt hàng).
Tôi lưu trữ các số dưới dạng chuỗi vì có tùy chọn hiển thị một số thông tin bổ sung là văn bản.Cách (gần) tốt nhất để quản lý danh sách với các mục dịch chuyển
Vì điều này cần nhiều bộ nhớ để lưu trữ, tôi quyết định rằng tôi sẽ chỉ lưu trữ tối đa 5 triệu mục. (điều này sẽ chỉ mất khoảng 250-300mb).
Danh sách được lấp đầy bởi đầu ra của phép tính. Nếu một số được tìm thấy nó sẽ được thêm vào danh sách, con số này luôn luôn lớn hơn các mục hiện có.
Khi danh sách đạt đến 5 triệu, tôi muốn xóa mục đầu tiên và thêm mục mới vào danh sách.
thích:
// Why is this so freaking slow???
if (_result.Count == 5000000)
_result.RemoveAt(0);
_result.Add(result);
Như bạn có thể đọc trong các bình luận, điều này rất, rất, rất chậm. Nó chỉ cắt giảm hiệu suất của tôi xuống 15 lần. Trường hợp mất khoảng 2 phút, nó mất khoảng 30.
Tôi đã thử một vài điều với LINQ như .Skip(1).ToList
nhưng điều đó sẽ tạo lại danh sách và do đó thậm chí còn chậm hơn.
Danh sách phải theo thứ tự đúng, do đó ghi đè theo chỉ mục không phải là một tùy chọn (trừ khi bạn có thể giải thích một công việc tốt đẹp xung quanh).
Câu hỏi của tôi:
Có cách nào tốt để làm điều này không?
Tôi thực sự cần hiệu suất ở đây vì có thể cần kiểm tra khoảng 10000000000 số. Điều này có thể mất một ngày là dĩ nhiên, nhưng một tháng là một chút quá nhiều :(
Cần biết thêm chi tiết, cảm thấy tự do để hỏi, tôi sẽ rất vui để cung cấp
Giải pháp:..
này thực hiện O (1)
// Set the _result
Queue<object> _result = new Queue<object>(5000000);
/// Inside the method
// If the count has reach it's max, dequeue the first item
if (_result.Count == 5000000)
_result.Dequeue();
_result.Enqueue(result);
Có lý do thuyết phục nào khiến bạn phải sử dụng danh sách không? Bạn có thể sử dụng cơ sở dữ liệu SQLite thay vì – swiftgp
@ user1556110 Ứng dụng phải có khả năng chạy trên bất kỳ máy tính nào và trong bộ nhớ, tôi không biết liệu điều đó có khả thi trong SQLite hay không. – Mixxiphoid
@downvoter: quan tâm giải thích? – Mixxiphoid