【发布时间】:2014-06-10 15:14:47
【问题描述】:
我遇到了一个非常奇怪的问题。 我的 c++ 程序使用我编写的 DLL。 此 DLL 导出一个 MyDocument 类。
#ifdef WIN32
# if defined(CORE_EXPORTS)
# define CORE_API __declspec(dllexport)
# elif defined(MCORE_IMPORTS)
# define CORE_API __declspec(dllimport)
# else
# define CORE_API
# endif
#else
# define CORE_API
#endif
class CORE_API MyDocument
{
public:
...
};
当我的客户端程序尝试创建此对象的数组时,在调试模式下需要超过 7 秒(几乎 10 秒)。
MyDocument *docs = new MyDocuments[550];
我阅读了有关在环境变量中使用 _NO_DEBUG_HEAP=1 的信息,但它并没有改变任何东西。
而且,我发现了一些奇怪的东西。我没有导出类 MyDocument,而是将整个代码放在头文件中,这样我就可以通过仅包含它的头文件来使用它。 在这种情况下,相同的分配语句几乎是瞬时的。
MyDocument *docs = new MyDocuments[550];
老实说,我不知道那里发生了什么。
有什么建议吗?
我的配置:带有 VS Express 2008 的 XP。
Z.
【问题讨论】:
-
请检查DLL是否启用[延迟加载][1]。也许是第一次使用类后加载 DLL 所花费的时间? [1]:msdn.microsoft.com/en-us/library/151kt790.aspx
-
好的。我发现发生了什么事。我的同事在主库标题中包含“vld.h”。 (vld = Visual Leak Detector library),他忘了删除它......在调试模式下,它确实降低了性能......所以,与 C++ 分配或其他无关。对不起。主题已关闭。
标签: c++ performance memory-management dll visual-studio-debugging