2010-07-14 84 views
3

我有一些大中型项目正在积极使用boost库,因此在调试应用程序性能(Visual Studio 2008)方面受到影响。C++优化问题

我现在使用的解决方案意味着即使在调试模式下打开函数内联,这会带来足够的性能,但肯定会有一些缺点。

有没有人知道如果我强制功能内联(/Ob2)开关,我将在调试功能方面失去什么?

也许有人有关于加快boost /其他模板库的任何其他想法调试性能?

+2

你有没有简介该计划?如果它写得不是最理想的呢? – sharptooth 2010-07-14 12:44:25

+0

@sharptooth我正在分析我的应用程序的'Render'方法,并认为'boost'方法有很多assert语句可以很容易地将150 fps减少到15 =) – 2010-07-14 13:41:12

回答

8

在我看来,你应该可能而不是是性能测试你的调试版本。

保存单元测试的调试版本,以便您可以轻松找到问题,但真正的测试(功能性能)应该可能在发布版本上。

这就是你的客户将会运行的所有,对吧?

+3

+1。调试版本通常包含大量的偏执检查,这些检查耗费大量时间。 – sharptooth 2010-07-14 12:51:28

+2

在游戏编程中,常见问题是您经常需要调试模式来运行速度足以帮助您调试游戏。在这种情况下,你的答案无济于事。但是,如果它在Debug中运行得“速度足够快,可以调试”,并且在Release中效果更好,那么你是对的:优化只有在Release中才有意义。 – Klaim 2010-07-14 13:08:33

1

我建议调试在Debug模式下构建的应用程序,并在内置Release模式时使用它(用于性能测试,一般用法等)。这样你就不用担心在调试时丢失任何东西。

无论如何,打开Debug中的函数内联可能会在遍历代码时遇到调试器,并且遇到对内联函数的函数调用。但我从来没有测试过,所以我不确定。

1

在Debug和Release配置中使用/Ob2。因此,当您调试它时,它的行为将与释放模式下的行为相同。

3

我同意以前的答案,你不应该真的关心调试版本的性能。测试在那里,因为我们需要他们...

但是,我是一个务实的程序员,并有一个原因,我不使用valgrinded应用程序来运行我的测试:我不希望他们太慢无论如何,因为该系统在这一点上变得完全不切实际。

我没有看到启用内联的任何错误,确保调试器可能会挑出产生代码的代码的位置,但它不会修改代码本身。

我也看到了部分调试版本。这个想法是关闭那些真正瘫痪程序的调试功能(如迭代器检查),以便性能仍然可以接受。如果您确定哪些调试功能会降低速度,它可能会帮助您。这就是说,我从来没有遇到性能问题,但随后我使用gcc进行编译,我不知道内联是保留还是不在调试中。

+0

用于部分调试版本的+1。在删除'assert'之前,我创建了一个fast_debug目标,并关闭了边界/迭代器检查。它并没有内联。 – KitsuneYMG 2010-07-14 14:12:21