.NET框架的效率有多高;s DataVisualization.Charting.StatisticFormula.M
本文关键字:DataVisualization Charting StatisticFormula 框架 效率 NET | 更新日期: 2023-09-27 18:00:22
我试图使用ILSpy在函数System.Windows.Forms.DataVisualization.Charting.StatisticFormula.Mean()
中查看System.Windows.Forms.DataVisualization.dll
,但它似乎无法呈现内容。
我很好奇,这个函数在生成均值方面是否比简单地编写自己的均值函数更有效,比如:
public static double Mean(this IEnumerable<double> values)
{
double sum = 0;
int count = 0;
foreach(double d in values)
{
sum += d;
count++;
}
return sum / count;
}
我可能会与300万或更多的会员打交道。
[更新]
在测试过程中,LINQ的IEnumerable.Average()
在我以前的双核工作站上看起来非常高效,在0.0011471秒内处理了87000个成员的List<int>
。这比我想象的要高效得多:
var s3 = Stopwatch.StartNew();
double average1 = DaySampleValues.Average();
s3.Stop();
TimeSpan totaltime = s3.Elapsed; // = 0.0011471 seconds
Average是一个O(n)
操作,因此您可能无法在C#中对其进行太多优化。您可以尝试使用进行并行处理
values.AsParallel().Average();
但是并行化的开销可能超过同时运行多个线程的好处。
唯一的其他优化将是用对values.Count()
的调用来代替count
测量。如果底层数据结构是List
或Array
,那么Count()
将是O(1)
,并且可以节省一些计算时间。
在任何情况下,获得真实答案的唯一方法是测量。试试每种方法,看看哪种更快。如果可能的话,也可以在不同的系统架构上尝试它们,看看多核、更多内存等的好处。
或者不能使用LINQ.Average()?