【问题标题】:Performance issue when allocating an object imported from a DLL分配从 DLL 导入的对象时的性能问题
【发布时间】: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


【解决方案1】:

请检查 CORE_EXPORTS 或 CORE_INPORTS 是否已在包含该头文件的编译单元中明确定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多