VBA与VB.net性能与Excel数据库

我有从Excel数据透视表生成的80*15*5 = 6000数据点的表。 我必须在Visual Basic for ApplicationsVisual Basic.net Visual Basic for Applications编程或使用Excel公式进行select。 所有数据必须以两种不同的方式进行分析,必须计算不同的东西,并且用户应该能够以对用户友好的方式生成输出,而不必知道数据。

一个循环中循环的小示例程序在VBA中为100秒,而在Visual Basic.net中为34。 如果我要使用Excel公式,我还必须编写多个函数,因为它们还不在Excel中。 现在我正在为另一个程序做这个,而且这个在我公司的电脑上很慢。

运行时间使我selectVB.net,但是当外部VB.net创build的程序必须连接到Excel数据库时,这仍然会更快? 在VBA中使用这些数据的相对简单的方法使我想要selectVBA。

除此之外,我的猜测是使用Excel公式并不是最方便的方法,因为上面公式中的8015可以随着时间的推移变大。

总体而言,有什么话要说我为什么要select哪种解决scheme?

不要紧,你应该坚持使用VBA,因为当你使用.NET连接到“非托pipe”(非.NET)应用程序时,你将不得不比使用VBA更积极地pipe理内存。 .NET到Excel在后台使用“运行时可调用包装器”,以便两种架构可以通信,但是它们使用不同的内存pipe理机制。

尤其是使用Excel,许多对象是从方法调用中返回的,但是你不必对它们做任何事情。 如果你不知道这些(这很容易做),那些对象将留在内存中,即使.NET应用程序已经终止,Excel仍然保持活着状态。 清理所有这些对象后,会涉及许多对System.Marshal.ReleaseComObject()调用。

至于你提到的性能问题(在循环中循环),这只是(对不起)在任何语言不好的编程习惯。 很less有需要做这样的事情,如果你这样做,你应该重新考虑你的方法。

另外,理解VB.NET和VBA是完全不同的语言是非常重要的,尽pipe它们表面上看起来非常相似。 VBA的最佳实践和常用技巧不应该转移到VB.NET。 如果你对.NET不熟悉,你首先要做一些认真的研究。

实际上,使用.NET转换为Excel的唯一原因是.NET提供了一些VBA无法实现的function,但考虑到这种情况似乎并非如此,坚持使用VBA将会变得更加简单只要你适当地优化你的代码,从长远来看高效的解决scheme。