2011-09-23 36 views
9

Tôi có một bảng (Sql của tôi) với 2 triệu bản ghi và một danh sách có 100 bản ghi. Tôi có Danh sách Ngoại trừ biểu thức lamda để tìm tất cả các Url đó có trong Danh sách nhưng không có trong Bảng.Danh sách và LINQ to Sql Hiệu suất vấn đề

Vấn đề hiện tại là mất nhiều thời gian khoảng 5 phút. Tôi đang làm việc trong VPS mạnh mẽ và mã và cơ sở dữ liệu trong cùng một máy chủ.

Vui lòng đề nghị tôi Tất cả các cách có thể để tăng hiệu suất của LINQ lên sql và LINQ thành thực thể.

Mã My Is`return

Urls.Except(DbContext.postedurllists.Select(crawl => crawl.PostedUrl).ToList()).ToList();` 

đâu url là Danh sách có chứa 100 url Và postedurllists là một bảng có chứa 2 triệu hồ sơ. Cảm ơn

+1

20L? Bạn có nghĩa là 20 "lakh", tức là 2 triệu? (Cần lưu ý rằng "lakh" không được sử dụng rộng rãi bên ngoài Ấn Độ và các nước trong khu vực đó.) Vui lòng hiển thị mã của bạn - rất khó để giúp chẩn đoán vấn đề chỉ từ một mô tả * của mã thay vì mã. –

+0

@Jon Cảm ơn bạn đã đề xuất. –

Trả lời

3

Bạn hiện đang kéo tất cả URL từ cơ sở dữ liệu. Đó không phải là một ý tưởng hay. Thay vào đó, tôi sẽ đề nghị kéo ngã tư từ cơ sở dữ liệu bằng cách đi qua một cách hiệu quả danh sách Urls của bạn vào cơ sở dữ liệu, và làm một ngoại trừ dựa trên kết quả:

var commonUrls = DbContext.postedurllists 
          .Select(c => c.PostedUrl) 
          .Where(url => Urls.Contains(url)) 
          .ToList(); 

var separateUrls = Urls.Except(commonUrls); 
+0

Cảm ơn rất nhiều vì bạn đã trả lời –

+0

Hoạt động tuyệt vời, thnx –