.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

.NET框架的效率有多高;s DataVisualization.Charting.StatisticFormula.M

Average是一个O(n)操作,因此您可能无法在C#中对其进行太多优化。您可以尝试使用进行并行处理

values.AsParallel().Average();

但是并行化的开销可能超过同时运行多个线程的好处。

唯一的其他优化将是用对values.Count()的调用来代替count测量。如果底层数据结构是ListArray,那么Count()将是O(1),并且可以节省一些计算时间。

在任何情况下,获得真实答案的唯一方法是测量。试试每种方法,看看哪种更快。如果可能的话,也可以在不同的系统架构上尝试它们,看看多核、更多内存等的好处。

或者不能使用LINQ.Average()?

相关文章:
  • 没有找到相关文章