0

我有一个CalculateLinearRegression()调用类LinEst函数的方法Excel.Application.WorksheetFunctionLinEst每次调用大约 3,500 次CalculateLinearRegression()。我将 WorksheetFunction 类注入到我的方法中,因此我知道只创建了该类的一个实例。

每次调用CalculateLinearRegression()大约需要 10 分钟,我确信是该LinEst函数正在减慢速度(删除对LinEst结果的调用和硬编码意味着该方法将在几秒钟内运行)。

我很欣赏这LinEst是在做相当多的计算,但我怀疑它做的太多会导致这种延迟,因此我认为这可能是对 Excel 函数的调用增加了延迟。有谁知道加快速度的方法,或者 C# 直接替换该LinEst函数?

4

3 回答 3

1

对 Excel 对象模型(如 WorksheetFunction)的每次调用都必须通过 Interop-Com。由于 Interop 的开销很高,因此多次调用很慢。

一种简单的解决方案可能是使用 Excel-DNA 切换到 XLL 界面(速度快很多倍)。

于 2012-10-24T10:02:44.390 回答
1

LinEst 有一些替代的 C# 实现,但我不能直接保证。例如,这里有一个讨论:C# 相当于 Excel 中的 LINEST 是什么?

我也想为您的长期运行功能添加一些支持,但您的问题中没有足够的信息来发表评论。你能发布它的样子吗?只是 Excel 调用减慢了一切吗?

于 2012-10-24T09:34:57.017 回答
1

就个人而言,除非您绝对需要(例如,将文件保存为二进制 MS excel 格式),否则我会避免使用 Excel 互操作。自动化 Excel 在性能方面涉及一些相当可怕的成本。

如果您只需要 LINEST 提供的功能,请考虑使用以下文章中的代码:http: //www.codeproject.com/Articles/25335/An-Algorithm-for-Weighted-Linear-Regression 虽然我没有自己用了代码,这篇文章似乎很受重视。

于 2012-10-24T09:40:37.780 回答