我已经尝试根据传统的蛮力搜索检查 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 BruteForceSearch
00:00:00.0068469 SearchViaContainsMethod
00:00:00.0032512 SearchViaLINQ
我可以理解所有事情所花费的时间都非常短,并且以当前处理器的速度使用 LINQ 可能不会产生内存开销。
我想知道,当处理大量数据时,速度会不会呈指数级增长,我们真的必须在速度上妥协以保证代码的可读性?
请帮助理解这一点。
(礼貌:OperationTimer 类型取自Jeffery Ritcher通过 C# 的 CLR 。