从C#中调用的Excel函数运行缓慢

我有一个方法CalculateLinearRegression()调用Excel.Application.WorksheetFunction类的LinEst函数。 LinEst调用CalculateLinearRegression()都会调用LinEst大约3,500次。 我将WorksheetFunction类注入我的方法,所以我知道只有一个类的实例被创build。

CalculateLinearRegression()每次调用都需要大约10分钟,我确定这是LinEst函数减慢向下(去掉LinEst的调用,硬编码结果意味着方法在几秒钟内运行)。

我很欣赏LinEst正在做一些公平的计算,但是我怀疑这样做会造成这种延迟,所以我认为这可能是对Excel函数的调用正在增加滞后。 有没有人知道要么加快速度的方式,或者C#直接replaceLinEst函数?

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

我想为你的长时间运行function添加一些支持,但是你的问题中没有足够的信息来评论。 你能发表一个样子吗? 这只是Excel的调用,放缓了一切?

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

如果您只需要LINEST提供的function,请考虑使用以下文章中的代码: http : //www.codeproject.com/Articles/25335/An-Algorithm-for-Weighted-Linear-Regression尽pipe我没有使用自己的代码,文章似乎被高度重视。

每次调用Excel对象模型(如WorksheetFunction)都必须通过Interop-Com。 由于Interop的开销很大,所以多次呼叫很慢。

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