相关疑难解决方法(0)

生成最快的可执行文件

我有一个非常大的程序,我一直在visual studio下编译(v6然后迁移到2008).我需要可执行文件尽可能快地运行.该程序花费大部分时间处理各种大小的整数,并且IO很少.

显然我会选择最大化优化,但似乎有很多事情可以做,而不是在优化的标题下,这仍然会影响可执行文件的速度.例如,选择__fastcall调用约定或将结构成员对齐设置为大数.

所以我的问题是:我是否应该使用其他编译器/链接器选项来使程序更快,而不是从"属性"对话框的"优化"页面控制.

编辑:我已经广泛使用了分析器.

c++ windows optimization visual-studio-2008

4
推荐指数
4
解决办法
2093
查看次数

如何向老板解释代码/资源优化是否重要?

啊,每次都是如此令人沮丧..

我们的托管公司有一个专用的服务器,每当我必须写下一个新的应用程序(或添加到一个预先存在的应用程序)时,我会"失去"一段时间来优化许多行为的代码(减少db查询,优化数据库结构,减少带宽等.)取决于应用程序应该做什么.

显然,关键不在于我编写错误的代码然后重建它,只是在项目完成之后,我总是找到可以做得更好的事情.

每次,如果我的老板抓住我这样做,他会说'你在浪费你的时间!如果应用程序需要更多资源,我们会购买更多RAM,更多CPU或更多带宽!'.

什么是最好(也是最简单)的方式来解释他,优化仍然很重要,而且不是那么容易或自动升级(生产!)服务器的硬件?

编辑:我不是只谈论数据库优化,而是谈论应用程序的每个方面

optimization performance

4
推荐指数
3
解决办法
700
查看次数

如何处理代码中的优化

我目前正在为一些代码编写各种优化.每个优化都会对代码效率产生很大影响(希望如此),但也会影响源代码.但是,我希望保留启用和禁用其中任何一个以进行基准测试的可能性.

我传统上使用这种#ifdef OPTIM_X_ENABLE/#else/#endif方法,但代码很快就难以维护.

还可以为每个优化创建SCM分支.在您想要启用或禁用多个优化之前,代码可读性要好得多.

有没有其他的,希望更好的方法与优化一起工作?

编辑:一些优化不能同时工作.我可能需要禁用旧的优化来替换新的优化,看看我应该保留哪一个.

c c++ optimization

4
推荐指数
1
解决办法
262
查看次数

Java,JIT和垃圾收集器的效率

我想知道Java的效率以及Java虚拟机和Android的优缺点.效率是内存使用率低,处理器使用率低和执行速度快.

移动设备比PC更简单,然后应用程序需要更高效.服务器接收许多连接,它们需要非常高效.许多移动设备使用Android和Java应用程序,许多服务器使用PHP.

Java和解释语言(如Java Script,Python和PHP)能否比C和C++更高效?

JIT(及时)优势:

  • 它可以更好地进行优化,因为它知道某些变量的价值以及使用或更改的位置.
  • 它了解处理器并可以使用处理器特定指令进行优化.
  • 将函数转换为内联函数更容易.
  • 它可以删除已知的条件测试并删除不会运行的块.

Java缺点:

  • 当应用程序第一次运行时,应用程序将非常慢,因为字节码将被解释,JIT编译器将进行许多分析以找到良好的优化.应用程序无法使用最大的硬件电源.如果一个应用程序是一个游戏或一个实时应用程序,如果它是第一个成功运行并且没有延迟,但它使用最大的硬件功率,那么下次运行应用程序时,它将不会使用由于优化而产生的硬件功率最大值.问题是app无法设计为在优化后使用最大的硬件功率,因为​​它在第一次运行时会太慢,并且不会继续运行.
  • Java检查数组索引是否不在边界内,并检查指针是否为空.它将为生成的代码添加几个内部"if".
  • 所有对象都使用垃圾收集器,包括非常容易手动删除的对象.
  • 所有对象实例都是使用动态内存分配创建的,包括可以轻松使用堆栈的对象.如果循环迭代开始创建类的实例并结束删除创建的对象,则动态内存分配将是低效的.
  • 垃圾收集器需要在清理内存时停止应用程序,这对于游戏,GUI应用程序和实时应用程序来说是非常不受欢迎的.引用计数很慢,无法处理循环引用.多线程垃圾收集器速度较慢,需要更多地使用CPU.

java performance jit garbage-collection

4
推荐指数
1
解决办法
2543
查看次数

Objective-C运行时性能惩罚的细节

我一直在尝试使用Objective-C(特别是GNU运行时,我没有使用GNUStep或类似的东西)来扩展C对象.到目前为止一切顺利 - 它运行良好,我真的很喜欢语法,但是从我读过的内容来看,使用Objective-C对象会有性能上的损失.

我通常不会过早地进行优化,但我正在开发一款游戏,所以性能最终会变得非常关键 - 我想知道自己要做些什么!有几个人建议我在游戏中使用Objective-C会很好,只要我的内部循环用标准C编写,但问题是找到我应该进行切换的点.

所以我的问题是双重的:

  • 什么会导致性能损失?(所以我知道应该避免的)
  • 这种性能损失大致有多重要?(所以我可以提前猜测我的游戏中哪些部分需要用C编写)

我的猜测是,在Objective-C对象上调用方法会产生一种惩罚,但我不确定还会有什么 - 取消引用Objective-C对象会产生类似的惩罚?

int a = myobj->a;
Run Code Online (Sandbox Code Playgroud)

如果使用a try-catch-finally- 这会在没有异常抛出的情况下导致性能损失吗?

我意识到,在某种程度上,我可以使用基准测试来解决大部分问题,但我对此相对较新,我希望更深入地了解Objective-C的工作原理以及任何性能损失的性质.

我暂时对C++不感兴趣,我只是在试验Objective-C.

c performance objective-c

4
推荐指数
1
解决办法
1579
查看次数

继续循环内部if语句与使用循环内if语句的否定

例如,让我们考虑以下2个代码:

for (i = 0; i < 1000; i++)
{
   if ( i % 2 != 0)
   {
       continue;
   }
   else
   {
     ...  
   }    
}
Run Code Online (Sandbox Code Playgroud)

for (i = 0; i < 1000; i++)
{
   if (i % 2 == 0)
   {
     ...  
   }    
}
Run Code Online (Sandbox Code Playgroud)

两者都会导致相同的结果.那么哪一个使用?哪一个更好?这两者之间是否存在显着的性能差异?让我们看看你们看到了什么.我喜欢我在这里看到的关于这些事情的讨论.这可能会导致更好的代码编写和更好的执行时间.我发布了这个问题,因为我找不到答案.如果我找不到答案,我可能会在将来发布另一个这样的人.

PS什么是你可以在没有它的情况下继续使用循环的目的?

syntax optimization loops continue execution

4
推荐指数
1
解决办法
2085
查看次数

为台式机和超级计算机编写的代码有什么区别?

假设,如果我的科学工作导致功能/模块/子程序(在桌面上)的开发,我需要知道将其纳入大型模拟中以在超级计算机上运行(可能模拟分子) ,液体,反应等)?

我的印象是,它可能与利用某些库(例如,BLAS,LAPLACK)尽可能,修改算法(减少迭代),分析,并行化,考虑内存 - 硬盘处理器使用/访问...我是意识到这句格言,"想要优化你的代码?不要这样做",但如果有人想学习编写有效的代码,那么可以提供哪些参考?

我认为这个问题与语言无关,但由于生物分子模拟,气候建模等许多数字运算包都是在某些版本的Fortran中编写的,因此这种语言可能是我感兴趣的目标(我在Fortran中进行了相当广泛的编程) 77).

memory optimization performance hpc grid-computing

4
推荐指数
3
解决办法
278
查看次数

用于c ++代码的分析器,非常困

我是剖析新手.我想优化我的代码以满足时序约束.我使用Visual C++ 08 Express,因此必须下载一个分析器,对我来说它非常困.我做了一些搜索,但没有找到关于Sleepy的正确教程,我的问题是:如何正确使用它?我掌握了分析的一般概念,所以我按照%排序来排序以找到我的瓶颈.首先,在这个列表的顶部,我有ZwWaitForSingleObject,RtlEnterCriticalSection,operator new,RtlLeaveCriticalSection,printf,一些迭代器......并且在它们占用60%之后出现了我的第一个函数,第一个位置是Child Calls.有人可以解释一下为什么上面提到的,它们是什么意思,如果我无法访问这个关键的60%,我怎样才能优化我的代码?(对于"源文件":未知......).另外,对于我的函数,我认为每行都有时间,但事实并非如此,例如算术或某些函数没有时间(不嵌套在未使用的"if"子句中).最后一件事:如何发现某条线可以执行超高速,但被称为数千次,是实际的瓶颈?

最后,睡眠好吗?或者我平台的一些免费替代品?

非常感谢!干杯!

        • 更新 - - - - -

我找到了另一个版本的探测器,名为plain Sleepy.它显示了一些片段被调用的次数加上行的数量(我猜它指向关键的片段).所以在我的情况下.. KiFastSystemCallRet需要50%!这意味着它等待一些数据吗?如何改善这个问题,是否有一个可行的方法来跟踪导致这些多次调用的原因并最终删除/更改它?

c++ profiling verysleepy

4
推荐指数
1
解决办法
8891
查看次数

如何在为未知设计时避免优化的危险?

两个人:

1)假设您正在设计一种新型应用程序,并且您正在提出新算法来表达概念和内容 - 尝试在该阶段主动不考虑优化技术是否有意义,甚至如果在你的脑海里,你担心它可能最终成为数百万元素的O(N!)?

2)如果是这样,那么为了避免限制在概念验证运行后你可以优化的酷功能- 你如何阻止这个程序员一生的习惯?我一直在尝试心理练习,纸质笔记,但我长大的基本上是计算汇编程序中的时钟周期,并且在充分考虑功能价值之前,我不断发现自己否决了过于浪费的潜在解决方案.

编辑:这是关于设计以前没有做过的事情(未知),当你甚至不确定它是否可以在理论上完成时,别担心手头有无限的计算能力.因此,"你必须在拥有原型之前进行优化,因为它是一个既定的计算原理"的答案并不是特别有用.

optimization

3
推荐指数
2
解决办法
580
查看次数

您如何找到程序中最不优化的部分?

是否有任何工具可以提供程序大部分执行时间所用的直方图?

这是在visual studio 2008中使用c ++的项目.

c++ optimization profiler visual-studio

3
推荐指数
2
解决办法
423
查看次数