gpt4 book ai didi

c# - 在使用 LINQ 时,我们是否为了实现代码可读性而牺牲了性能?

转载 作者:行者123 更新时间:2023-11-30 19:27:10 30 4
gpt4 key购买 nike

我已尝试针对传统的暴力搜索检查 LINQ 性能,LINQ 似乎比暴力搜索慢得多,使用 Contains 方法需要更长的时间!

下面是我的代码:

class Program
{
int[] array;
public Program(int size)
{
array = new int[size];
for (int i = 0; i < size; i++)
{
array[i] = size - i;
}
}
public void BruteForceSearch(int toBeSearched)
{
foreach (int i in array)
{
if (i == toBeSearched)
{
return;
}
}
}
public void SearchViaContainsMethod(int toBeSearched)
{
if (array.Contains(toBeSearched)) { return; }
}
public void SearchViaLINQ(int toBeSearched)
{
var x = from a in array
where a == toBeSearched
select a;
}
static void Main(string[] args)
{
Program p = new Program(100000);
using (new OperationTimer("BruteForceSearch"))
{
p.BruteForceSearch(0);
}
using (new OperationTimer("SearchViaContainsMethod"))
{
p.SearchViaContainsMethod(0);
}
using (new OperationTimer("SearchViaLINQ"))
{
p.SearchViaLINQ(0);
}
Console.Read();
}



class OperationTimer : IDisposable
{
private Stopwatch m_stopwatch;
private String m_text;

public OperationTimer(String text)
{
m_text = text;
m_stopwatch = Stopwatch.StartNew();
}

public void Dispose()
{
Console.WriteLine("{0} {1}",
(m_stopwatch.Elapsed), m_text);
}
}

输出:

00:00:00.0009032 暴力搜索
00:00:00.0068469 SearchViaContainsMethod
00:00:00.0032512 SearchViaLINQ

我可以理解所有事情所花费的时间都非常短,并且以当前处理器的速度使用 LINQ 可能不会产生内存开销。

我想知道,当处理大量数据时,速度会呈指数级增长吗?我们真的不得不为了代码可读性而在速度上做出妥协吗?

请帮助理解这一点。

(礼貌:OperationTimer 类型取自 Jeffery Ritcher 的 CLR Via C#

最佳答案

是的,我们正是这样做的:选择代码可读性而不是性能。但在绝大多数情况下,提高代码可读性确实更好。如果您使用非常有限的内存或 CPU,或者在对性能非常敏感的环境中工作,这可能是个问题。但如果你在这样的环境中,你不应该选择像 C#/.NET 这样的高级语言/平台。

如果您分析您的应用程序并发现 LINQ 的开销为某些特定操作增加了大量时间,那么您可以重写它以提高效率。在那之前担心它只是premature micro-optimization ,弊大于利。

关于c# - 在使用 LINQ 时,我们是否为了实现代码可读性而牺牲了性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19402409/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com