在大(内存)平面表中评估动态创建的公式

时间:2017-04-04 08:34:04

标签: c# mysql .net ncalc

我目前正在使用此代码:

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]

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

0 个答案:

没有答案