Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 强制Linq不要延迟执行_C#_Linq_Delayed Execution - Fatal编程技术网

C# 强制Linq不要延迟执行

C# 强制Linq不要延迟执行,c#,linq,delayed-execution,C#,Linq,Delayed Execution,事实上,这和这篇文章的问题是一样的: 但由于他没有解释他为什么想要它,这个问题似乎被忽略了一点。下面是我类似但解释得更好的问题: 我有两种类型的线程(暂时忽略UI线程)。有“数据收集”线程类型和“计算”线程类型。数据收集线程速度很慢。有相当多的数据需要从不同的地方筛选。计算线程相对较快。到目前为止,设计模型是发送数据收集线程以查找数据,完成后将数据传递给计算 当我在Linq中对数据收集进行编码时,我最终将这种缓慢的速度提升到了我的计算线程中。现在有些数据元素在计算过程中使用之前无法完全解析,这

事实上,这和这篇文章的问题是一样的:

但由于他没有解释他为什么想要它,这个问题似乎被忽略了一点。下面是我类似但解释得更好的问题:

我有两种类型的线程(暂时忽略UI线程)。有“数据收集”线程类型和“计算”线程类型。数据收集线程速度很慢。有相当多的数据需要从不同的地方筛选。计算线程相对较快。到目前为止,设计模型是发送数据收集线程以查找数据,完成后将数据传递给计算

当我在Linq中对数据收集进行编码时,我最终将这种缓慢的速度提升到了我的计算线程中。现在有些数据元素在计算过程中使用之前无法完全解析,这是一个问题


我想强制Linq在给定的时间完成它的工作(语句结束?方法结束?“请完成,该死”方法调用),这样我就知道我以后不会为此付费。将“.ToList()”添加到Linq的末尾是1。尴尬,和2。感觉就像是在装箱即将在另一个线程中立即解除装箱的内容。

您不会装箱任何内容,而是在缓冲结果

如果您确实需要数据,使用
ToList()
基本上是一种方法。除非您准备立即使用数据,否则它必须被缓冲在某个地方,不是吗?列表只是一种方便的方法

另一种方法是在处理过程中随时进行——在生成数据时积极地使用数据。我并没有完全理解事情的不同方面,所以我不清楚这是否会对你有所帮助,但就我所知,这些基本上是你可以选择的

这实际上在您的描述中有点明确:

到目前为止,设计模型是 将数据收集线程发送到 查找数据,并在数据完成时 把数据传给计算机


调用
ToList()
基本上会将“请求时可以获取数据的查询”返回的内容更改为“缓冲在列表中的数据本身”。

能否解释更多原因。ToList是不可接受的?您提到了装箱和拆箱,但这些都是完全无关的话题

强制LINQ查询按需完成的部分工作需要存储结果。否则,为了再次看到结果,您必须重新处理查询。ToList通过将元素存储在
列表中
有效地实现了这一点


可以将元素存储在几乎任何其他集合样式的数据结构中,并进行各种折衷,以更好地满足您的需要。

DataContext
类中有一个
LoadOptions
属性,可以帮助您更急切地获取数据


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

我知道这个线程很旧。。。不管怎么说,有趣的是,还没人提到。
我在做一些事情,linq不过是一个荣耀的foreach驱动了一些副作用,而我并不真正关心查询结果。。。因此,我不想分配任何多余的伪内存。

或对结果调用任何方法,如Count(),都应该执行相同的操作…这将强制对其进行计算,但数据将再次丢失,否则-如果原始查询随后被传回,则将再次对其进行计算,大概很慢。@GalacticCowboy:调用类似Count的方法将缓冲结果,但它们随后将被丢弃,只剩下Count而没有数据:(@clintp:我强烈怀疑你仍然在寻找一些你在这里描述的无法完成的事情。你希望当你从计算线程中使用信息时,信息立即可用,但你不想在数据读取线程中获取信息和处理它之间存储信息。没有储存它时,你希望如何快速获得它?@TimSchmelter:如果没有上下文,回答这样一个一般性的问题有点困难:)值得注意的是,你在这个问题上所做的基本上是一个坏主意-查询不应该有副作用。如果你没有在查询中加入副作用,你就不会有问题…仔细阅读。这感觉像装箱/拆箱。称之为“封装”,或“礼品包装”,或诸如此类。@clintp,对不起,我觉得这些比较不好。记住:查询理解的值是一个表示查询本身的对象,而不是其结果。如果您想要结果的快照,您必须以某种方式向查询对象询问(然后接受这样一个事实:当你使用它们时,它们可能已经过时了。)“ToList”似乎是最简单的方法。