-->

强制LINQ到没有延迟执行(Force Linq to not delay execution)

2019-07-29 10:42发布

事实上,这是因为这个帖子同样的问题:

我怎样才能确保我的LINQ查询执行在我的DAL调用的时候,不延迟的方式?

但由于他没有解释为什么他想要它,这个问题似乎已经超过了一下过去了。 这是我的同类,但是,更好的解释的问题:

我有线程两种类型(忽略UI线程片刻)屈指可数。 有一个“数据搜集”螺纹类型,和“计算”螺纹类型。 数据采集​​线程是缓慢的。 还有相当多的数据,通过从不同的地方来筛选。 计算线程是比较快的。 设计模型到这一点是发送数据采集线程去寻找数据,而当他们完成通行证运算处理的数据了。

当我编写Linq中我的数据收集我结束了吊装一些缓慢的回到我的计算线程 。 有迹象表明,直到他们在计算过程中使用没有得到彻底解决,现在的数据元素 - 这是一个问题。

我想强迫的LINQ在给定的时间来完成其工作(语句的结束?方法的结束了吗?“请完事,该死”方法调用),这样我才知道我不是为它付出以后。 添加“.ToList()”,以LINQ的结束是尴尬的1和2感觉像拳击东西是要在另一个线程暂时反正拆箱。

Answer 1:

你不会是拳击任何东西 - 你会缓冲效果。

使用ToList()基本上是去,如果你真的想要的数据的方式。 除非你准备好立即使用数据,它在什么地方缓冲,不是吗? 名单只是做一个便捷的方式。

另一种方法是做加工,然后有以及 - 使用数据作为你生产了,急切地问道。 我不太明白的事情不同的线程的一面,所以它不是很清楚,我是否会帮助你,但那些基本上都是提供给您的选择,据我可以看到。

这实际上是在你的描述有所明确:

设计模型到这一点是发送数据采集线程去寻找数据,而当他们完成通行证运算处理的数据了。

调用ToList()基本上改变了你从以“数据本身,在列表中缓冲”“当记者问到,可获取数据的查询”返回的内容。



Answer 2:

你能解释一下为什么多是.ToList不能接受? 你提到的装箱和拆箱但这些都是完全无关的话题。

迫使LINQ查询来完成需求的部分就必须存储的结果。 否则,为了再次看到的结果,你必须repprocess查询。 .ToList有效地存储在所述元素达到这个List<T>

这是可能的,几乎任何其他集合式的数据结构中的元素存储与可满足您的需求更好的各种权衡。



Answer 3:

有一个LoadOptions在财产DataContext类,可以帮助你更急切地获取数据。

否则,你可以使用一些巧妙的放置ToList()的。



Answer 4:

我知道这个线程是老了......反正,滑稽没有人提到.ToLast()呢。 我在做一些地方LINQ并不比一个华而不实的foreach行驶一定的副作用,我真的不关心的查询结果更...所以我不想分配更多的内存虚假超过必要。



文章来源: Force Linq to not delay execution