其实这个问题和这篇文章是同一个问题:
如何确保 LINQ 查询在 DAL 中调用时执行,而不是以延迟方式执行? https://stackoverflow.com/q/1013201/75642
但既然他没有解释why他想要它,这个问题似乎被忽略了一点。这是我的类似但更好解释的问题:
我有一些两种类型的线程(暂时忽略 UI 线程)。有“数据收集”线程类型和“计算”线程类型。数据收集线程很慢。有相当多的数据需要从不同的地方进行筛选。计算线程相对较快。到目前为止的设计模型是发送数据收集线程来查找数据,并在完成后将数据传递出去进行计算。
当我在 Linq 中对数据收集进行编码时,我最终发现了一些缓慢的情况回到我的计算线程。现在有些数据元素只有在计算过程中使用时才能得到完全解析——这就是一个问题。
我想强制 Linq 在给定时间完成其工作(语句结束?方法结束?“请完成,该死”方法调用),这样我就知道我以后不会为此付费。将“.ToList()”添加到 Linq 的末尾是 1. 尴尬的,并且 2. 感觉就像装箱了一些即将在另一个线程中拆箱的东西。
你不会对任何东西进行拳击——你会缓冲结果。
Using ToList()
如果您确实想要数据,基本上就是要走的路。除非您准备好立即使用数据,否则必须对其进行缓冲某处,不是吗?列表只是一种方便的方法。
另一种方法是当场进行处理——在生成数据时立即使用数据。我没有完全遵循事物的不同线程方面,所以我不清楚这是否会对您有帮助,但据我所知,这些基本上是您可以选择的。
这实际上是somewhat您的描述中明确:
到目前为止的设计模型是
将数据收集线程发送到
查找数据,当数据完成时
传递数据进行计算。
Calling ToList()
基本上将您返回的内容从“可以在要求时获取数据的查询”更改为“数据本身,缓冲在列表中”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)