0

我目前正在使用此代码:

using System;
using NCalc;

namespace SandboxConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            double[,] data = new double[100, 10];
            Random random = new Random();

            var numberOfRows = data.GetLength(0);
            var numberOfColumns = data.GetLength(1);

            for (int row = 0; row < numberOfRows; row++)
            {
                for (int col = 0; col < numberOfColumns; col++)
                {
                    data[row, col] = random.Next();
                }
            }

            // in the case of 10 columns the expression looks like: [x0] + [x1] + [x2] + [x3] + [x4] + [x5] + [x6] + [x7] + [x8] + [x9]
            var stringExpression = "";
            for (int col = 0; col < numberOfColumns - 1; col++)
            {
                stringExpression += string.Format("[x{0}] + ", col);
            }
            stringExpression += string.Format("[x{0}]", (numberOfColumns - 1));

            var exp = new Expression(stringExpression);
            var total = 0.0;

            for (int row = 0; row < numberOfRows; row++)
            {
                for (int col = 0; col < numberOfColumns; col++)
                {
                    exp.Parameters[string.Format("x{0}", col)] = data[row, col];
                }

                if (row % 100000 == 0)
                {
                    Console.WriteLine(row);
                }

                if (!exp.HasErrors())
                {
                    total += (double)exp.Evaluate();
                }
            }
        } 
    }
}

这里是假的“动态”表达式/公式:

[x0] + [x1] + [x2] + [x3] + [x4] + [x5] + [x6] + [x7] + [x8] + [x9]

添加 10000000 行“平面文件”的 10 列。执行速度不是很快,如果我有 1 亿行的话,我会达到限制。我可以做些什么来更快地执行上述操作,还是应该使用其他一些技术来执行这样的动态创建的公式?不确定 MySql 的速度有多快——在这里我会通过(例如 Dapper)将公式作为 SQL 生成到数据库。

4

0 回答 0