【发布时间】:2017-03-03 16:10:52
【问题描述】:
我的项目是商业项目,这里不能发,但是代码过程是:
- GetAll(LINQ)
- 过滤(Linq)
- 将 IEnumerable 结果传递给 RecyclerView 适配器
- 适配器将 IEnumerable 转换为 List
- 适配器为 ItemCard 充气
对 #4 的性能影响很大,大约 3k 项最多需要 3 秒。
如何减少对性能的影响?
我注意到如果我只是创建一个new List<>(3000),也需要大约 1.5 秒。
或者我不应该使用列表吗?
如果我们不使用 List,Adapter 是如何通过 [位置] 获取数据的。
How to go to particular Item in IEnumerable
ElementAt() 让我的应用在膨胀时完全死机。它似乎在每个项目上都做ToList()。
【问题讨论】:
-
那是因为主要工作发生在第4步,当
IEnumerable在内存中具体化为List,在此之前没有任何处理,它的延迟执行。我的理解是即使你最终只有 3 K 记录,但最初在GetAll你会得到很多记录,这会影响性能。 -
GetAll 和过滤时间不到 0.1 秒。如果我没有得到所有数据,我什至无法通过预测过滤这些数据。并且第 4 步花费的时间更少,好像过滤的结果是更少的项目。
标签: c# android sql linq xamarin