trong bộ nhớ tôi có một danh sách: người sử dụng Bộ sưu tập trong đó có khoảng 100K + hồ sơ của người sử dụng (tất cả đối tượng người dùng nạp đầy đủ từ cơ sở dữ liệu với các lĩnh vực như Bio, Tên, họ cuối cùng vv). Bộ sưu tập này được tìm nạp khi bắt đầu ứng dụng từ cơ sở dữ liệu và được lưu trong bộ nhớ.LINQ hiệu suất cho bộ sưu tập
Sau đó, tôi có mã như:
User cachedUser = users.FirstOrDefault(x => string.Equals(x.UserName, username,
StringComparison.CurrentCultureIgnoreCase));
nào tôi sử dụng để lấy người dùng từ bộ sưu tập này. Nhưng bằng cách nào đó tôi nhận thấy rằng hoạt động này là cực kỳ chậm. Có một vấn đề hiệu suất trong khi sử dụng LINQ để truy vấn trong bộ sưu tập bộ nhớ của các đối tượng lớn? Thay vào đó, tôi có nên gọi cho DB mỗi khi tôi muốn có người dùng không?
Bạn hiểu rằng 'FirstOrDefault' là O (n), phải không? Nếu bạn có một bộ sưu tập rất lớn, kiểm tra từng mục một sẽ mất một thời gian. (và dbs thường được lập chỉ mục) Có rất nhiều cách để tăng tốc độ này, không ít nhất là chỉ cần ném nó vào một từ điển. Có lý do nào bạn không làm điều đó không? –
Tôi muốn bộ nhớ cache tất cả người dùng nghĩ rằng nó sẽ là tốt hơn cho lý do hiệu suất như GetUser() phương pháp đang được gọi trên hầu như mỗi trang của ứng dụng của tôi. Nếu tôi sử dụng một từ điển, nó sẽ nhanh hơn nhiều? Là từ điển O (1)? Hay tôi cần phải sắp xếp từ điển của tôi trước? –
Bạn chỉ cần lưu bộ nhớ cache người dùng hiện tại? Bạn chỉ có thể sử dụng đối tượng 'Session' hoặc' Cache' được tích hợp sẵn cho điều đó. –