我有一个VB6应用程序,它需要使用.NET类中的某些功能。我为.NET类创建了一个.tlb(类型库),VB6应用程序调用它。
问题是它很慢。我遍历数据库中的每条记录,并为每个循环调用.TLB中的功能。
我的问题是:这种方法本身就很慢吗?这是什么原因?
.NET中的代码在VB6中是重复的(我知道这不是一个好习惯 - 我没做过)。 VB6代码用于使用VB6类,速度更快。这就是我得出的结论,使用.NET类太慢了。
答案 0 :(得分:3)
非托管到托管代码转换可能很慢,因为您传递的任何数据结构都必须进行封送处理。
例如,如果传递字符串,则整个字符串将复制到托管堆上的新.NET字符串对象中。
如果传递对象的引用,则在.NET端生成RCW(运行时可调用包装器)。 (从.NET调用这些对象可能会在另一个方向上再次导致编组开销。)
有关详细信息,请参阅MSDN上的Interop Marshaling主题。