我已将以下功能添加到现有的本机C ++应用程序中:
- 通过LoadLibraryA(...)
加载第三方DLL
- 通过GetProcAddress(...)
从DLL获取函数指针
- 该功能称为
醇>
虽然这基本上有效(该函数被调用并产生预期的输出)但是存在一个主要问题:函数调用(在3.中)非常慢。它需要超过300毫秒(!)才能执行,而它应该小于1毫秒。
所以我创建了一个新的空白C ++应用程序并复制了代码。因此,步骤1到3的执行方式与其他应用程序完全相同。该函数执行相同的操作并生成相同的结果。但执行速度要快得多:不到1毫秒,正如预期的那样。
我做了一些更多的观察:
- 两种结果都是100%可重复的。
- 两个应用程序似乎都具有相同的编译器/链接器设置。
- 线程/性能问题似乎不是问题所在,因为在两个应用程序中,代码都是在CPU使用率非常低的情况下在主线程上执行的(其他情况并不多)。结果也是可重复的,排除了这些时间问题。
- 在我的第一个应用程序中,每次调用DLL至少需要300毫秒,而在另一个应用程序中调用速度至少需要300毫秒。因此,行为不仅限于单一功能。
- 如果我使用调试或发布版本,则没有任何区别。
- 应用程序和第三方DLL都是32位。
所以现在我正在寻找一个可能导致两个应用程序在执行完全相同的事情时表现得如此不同的原因。