c# - C# 中的高性能乘法/求值

标签 c# performance matrix transform multiplication

抱歉主题模糊;很难简洁地描述我的问题。

我有大量对象(几千个)的集合,定义为...

public class Item
{
    public int ID;
    public float A;
    public float B;
    public float C;
    public float D;
    public float E;
    public float F;
    public float G;
}

如果我为这些 float 字段中的每一个都提供了一个乘数,那么找到我的大型集合中哪个项目具有最大的这些 float 乘以它们的乘数的最快方法是什么。

例如,我目前有类似...

public Item FindLargest(float aMult, float bMult, float cMult, float dMult, float eMult, float fMult, float gMult)
{
    Item largest = null;
    float largestTotal = 0f;
    foreach(Item item in ItemsCollection)
    {
        float total = item.A * aMult + 
                      item.B * bMult + 
                      item.C * cMult + 
                      item.D * dMult + 
                      item.E * eMult + 
                      item.F * fMult + 
                      item.G * gMult;
        if (total > largestTotal)
        {
            largest = item;
            largestTotal = total;
        }
    }
    return largest;
}

它的性能不足,所以我想知道我是否可以提前以这种方式重组数据,以便 FindLargest 调用更快。我这样做已经有一段时间了,性能还不错,ItemsCollection 中有大约 40-50 个项目,但现在我的应用程序不同部分的设计已经改变,作为副产品,我需要处理更大的数据集(~2000ish 而不是~50ish),所以我有兴趣进一步优化它。感谢任何人可以提供的任何帮助!

编辑:我应该首先提到这个:我已经将它并行化,因为调用它的东西已经高度并行化了。而调用这个的确实是调用了很多次,有很多不同的参数,非常快。每次在我的应用程序中打开文档中的值发生变化时,这需要调用大约一百次,并且应该感觉“响应”(已经在多个后台线程上进行了所有计算,所以我不是说 UI 锁定) .

编辑 2:在已接受的答案中查看我的评论。

最佳答案

我认为问题不在于您的功能。我用不到 0.1 秒的时间完成了集合中 500,000 项的功能。

您可能想找到一种方法来优化调用此函数的代码部分。在那个级别使用 PLINQ 应该会产生更好的结果。

关于c# - C# 中的高性能乘法/求值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5414263/

相关文章:

c# - 如何让 newtonsoft 将 yes 和 no 反序列化为 bool 值

MySQL - SELECT + JOIN + ORDER BY 性能

c++ - 为什么我的程序在输入矩阵值时崩溃?

python - 在 NumPy 中旋转晶体

c# - 使用新的签名功能自动化 Gradle 构建和签名

c# - 在 .Net Core 中测试 Controller 总是返回 false?

C# 递归反射

android - 如何检查 Android 应用程序是否接近 65k 方法限制

jquery - 在 jquery 上下文菜单中使用多个选择器

java - 如何在java中为矩阵制作边框?