【问题标题】:How to compile and start VSC++ Projects Faster?如何更快地编译和启动 VSC++ 项目?
【发布时间】:2011-05-09 13:22:45
【问题描述】:

您使用什么技术来快速编译和启动 VSC++ 项目?

对我们来说,尤其是所有 dll 的加载需要很长时间。有没有办法加快这个速度?该项目加载了大量 .dll,其中一些特别慢。

现在我们为我们的项目使用了统一构建,它的编译速度已经非常快了! =)

谢谢!

【问题讨论】:

  • “使用更少的 DLL”是一个有效的解决方案吗?

标签: c++ dll load performance optimizer-hints


【解决方案1】:

DLL 具有嵌入其中的默认加载位置。这通常由开发工具默认为所有 DLL 的相同地址。这意味着当 DLL 加载到内存中时,会发生很多冲突,并且必须重新寻址 DLL 并将其加载到空闲的内存位置。在处理具有大量 DLL 依赖项的项目时,我们可以通过设置 DLL 的默认地址来显着节省加载时间。

有关正在发生的事情及其如何提供帮助的更完整说明,请访问 drdobbs

我已经做了好几年了,所以现在可能已经过时了。

如果你走这条路值得记住,它可能与.net 配合得不太好。

【讨论】:

  • 手动设置起始地址对地址布局随机化有影响吗?
  • @RedX:我不知道。正如我所说,自从我这样做以来已经有好几年了。根据一些快速阅读,我猜如果您链接到启用 ASLR,它会忽略嵌入地址,但 一个猜测(我还没有找到源)。如果您有兴趣,可能值得在这里提问,看看是否有人知道。
  • @RedX:所有(代码)DLL 都设置了加载地址。它是 PE 标头中的必填字段。变基解决的问题是您已将它们全部设置为相同的地址。 ASLR 必须完全忽略该字段才能工作。当然,ASLR 90% 的好处是通过随机化系统 DLL 加载地址获得的。
【解决方案2】:

使用延迟加载的库。这是一个简单的编译设置更改(通常不需要更改代码),但它可以提供非常大的改进。

当然,当你实际使用这些 DLL 时,它们的加载时间仍然存在,但如果你有很多 DLL,你也很有可能不会一直使用它们。

【讨论】:

    猜你喜欢
    • 2014-10-12
    • 2016-09-16
    • 2018-07-04
    • 1970-01-01
    • 2011-10-24
    • 2017-06-14
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    相关资源
    最近更新 更多