如何提高此LINQ查询的性能?

时间:2013-10-14 15:17:39

标签: .net performance linq

如何提高以下linq查询的性能?

在运行它时,它引发了System.OutOfMemoryException的错误。 注意:我在XrmContext.sun_POSSet实体

中有很多记录
var a = (from temple in XrmContext.sun_POSSet
         select new POS()
         {
             id = temple.Id,
             Country = temple.sun_sun_country_sun_POS == null ? "" : temple.sun_sun_country_sun_POS.sun_name,
             CountryId = temple.sun_sun_country_sun_POS == null ? "" : temple.sun_sun_country_sun_POS.Id.ToString(),
             stringint = temple.sun_sun_stringint_sun_placeofstu == null ? "" : temple.sun_sun_stringint_sun_placeofstu.sun_name,
             stringintId = temple.sun_sun_stringint_sun_placeofstu == null ? "" : temple.sun_sun_stringint_sun_placeofstu.Id.ToString(),
             FullName = temple.sun_contact_sun_POS.FullName,
             EMail = temple.sun_contact_sun_POS.EMailAddress1,
             MobilePhone = temple.sun_contact_sun_POS.MobilePhone
         }).ToList<POS>();

1 个答案:

答案 0 :(得分:3)

如果没有关于记录数量的进一步信息,我会说你得到一个OutOfMemoryException,因为你在一个太大而无法保存在内存中的数据集上调用ToList()

ToList()强制评估基础IQueryable<T>,在这种情况下会导致所有记录返回到客户端并在内存中实例化。在你的情况下,根本没有足够的空间 - 你不应该假设会有。 将数据集带回客户端时,使数据集变小。

您应该考虑使用Skip()Take()来实现分页,或者使用适当的Where()子句来过滤数据。