【发布时间】:2013-11-20 01:35:25
【问题描述】:
List<Device> deviceList = GetDevices(); // these are loaded in memory already as a list
IQueryable<Device> IDevices = deviceList.AsQueryable<Device>();
deviceList = IDevices.Where(i => i.StatusID == 2).OrderBy(j => j.LastCommunicated).Skip(recordsToSkip).Take(pageSize).ToList();
鉴于上面的代码,我在列表中大约有 1000 个设备被查询。第三个语句很慢。如果它已经加载到内存中,它不应该很快吗?我知道在大多数情况下,您会将整个查询应用于数据库调用,但在我的情况下,我已经将设备加载到内存中。第一次和第二次通话非常快。
【问题讨论】:
-
非常慢到底是什么意思?你能发布你的测量结果吗?更好的是,你能发布分析代码的结果吗?
-
该调用不应“非常慢”。不是该列表中只有 1000 个项目。 StatusID 或 LastCommunicated CPU 密集吗?返回 4 个迭代器本身不应该是一个问题。 Take 和 skip 是(根据我的直觉和组装知识)非常快速的操作。
-
@Dave,请不要将您的问题改写为“我现在明白了”。这将帮助 0 个未来的用户。
标签: c# performance linq iqueryable