我目前正在使用此代码:
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)。