C# 从…起在里面在C中选择

C# 从…起在里面在C中选择,c#,linq,performance,C#,Linq,Performance,使用以下表达式是否有任何缺点或性能下降 from i in Enumerable.Range(1, Math.Min(strTexto.Length, tamMax) + 1) select Tuple.Create(strTexto.Substring(0, i - 1), strTexto.Substring(i - 1)) 在C中?像这样构建硬编码查询是否更可取 foreach (Int32 IntTmp in SomeListWithTheRange)

使用以下表达式是否有任何缺点或性能下降

from i in Enumerable.Range(1, Math.Min(strTexto.Length, tamMax) + 1)
                select Tuple.Create(strTexto.Substring(0, i - 1), strTexto.Substring(i - 1))
在C中?像这样构建硬编码查询是否更可取

foreach (Int32 IntTmp in SomeListWithTheRange)
    SomeListWithTheTuples.Add(new Tuple<String, String> (strTexto.Substring(0, i - 1), strTexto.Substring(i - 1)))
?


虽然第一个乍一看似乎更具可读性,但我注意到这种查询可能会变得非常缓慢。。。例如,第一个查询需要11毫秒来执行,而第二个查询只需要1毫秒。我说得对吗?我只是想确定一下,因为我需要实现大量此类查询。

第一种方法的性能与第二种方法一样好。当你说你已经注意到这种查询会变得非常慢时,你能提供更多的细节吗?您当然可以编写较慢的LINQ查询,但这是适当使用LINQ的问题

请注意,您的两个代码示例目前根本不等效——第一个示例只是构建一个查询,但根本不使用它。您的第二个似乎在重复调用Concat,当您对其进行迭代时,这会很慢,因为最终会有大量的迭代器


如果你能解释一下你实际上想做什么,那会很有帮助。

第一种方法的效果和第二种方法一样好。当你说你已经注意到这种查询会变得非常慢时,你能提供更多的细节吗?您当然可以编写较慢的LINQ查询,但这是适当使用LINQ的问题

请注意,您的两个代码示例目前根本不等效——第一个示例只是构建一个查询,但根本不使用它。您的第二个似乎在重复调用Concat,当您对其进行迭代时,这会很慢,因为最终会有大量的迭代器


如果你能解释一下你到底想做什么,那会很有帮助。

from..in..select不是C而是LINQ?可能需要更多的参考资料。@Bolu:你不能确切地说某个东西是LINQ,但不是C,反之亦然。LINQ并不是一种真正独立于C、VB或其他.NET编程语言的语言。我明白你的意思;from..in..select不是C而是LINQ?可能需要更多的参考资料。@Bolu:你不能确切地说某个东西是LINQ,但不是C,反之亦然。LINQ并不是一种真正独立于C、VB或其他.NET编程语言的语言。我明白你的意思;在使用此查询的方法中,我在查询之前有return关键字,以便它以可枚举的方式返回结果。不过,还有一个函数,我在其中使用了四次Concat,每个函数都有一个类似的查询。这能让事情变得更慢吗?@Miguel:再说一次,你必须提供更多的细节。很难根据粗略的细节来谈论性能。调用Concat 4次可能不会太糟糕,但您将有4个间接级别。在我使用此查询的方法中,我在查询之前有return关键字,因此它将以可枚举的方式返回结果。不过,还有一个函数,我在其中使用了四次Concat,每个函数都有一个类似的查询。这能让事情变得更慢吗?@Miguel:再说一次,你必须提供更多的细节。很难根据粗略的细节来谈论性能。调用Concat 4次可能不会太糟糕,但您将有4个间接级别。