通常,如果我的代码有任何性能问题,我将按照以下步骤来了解原因.
如果您的代码运行速度很慢,您会怎么做?
我有一个相对较长的功能,在仪器时间分析器中占主导地位.有没有办法在此函数中添加其他符号,以便采样将显示分配给函数不同部分的时间?我正在寻找像(1)年前教授存在的MARK宏.
我正在制作我的第一款Android游戏,它将成为一款使用opengl es的3D街机游戏.我已经做了很长时间的工作,主要是为了未来的灵活性优化发动机.
无论如何,现在我完全已经完成了游戏功能和所有漂亮的东西,但它落后于不是我的调试手机的手机.该游戏拥有相当高质量的手机游戏图形,所以预计会有一点点落后,但是在Nexus S上运行游戏和在MyTouch 4G上运行游戏之间的性能差异是巨大的.这款游戏甚至不能在像LG Optimus这样的低端手机上播放(游戏运行,但它太过波涛汹涌,不能轻松玩).在我的Nexus SI上很少会出现波动(我在游戏中实现了帧率独立运动)但是在MyTouch 4G上它更常见,虽然游戏仍然可以播放......但是很烦人
我来自桌面游戏开发背景,优化从来没有引起我的兴趣.你能推荐什么来帮助我加快比赛速度?
我尽可能地尝试优化代码,并且性能得到了显着改善,但似乎有一些我错过或忽略的东西.它是一个巨大的游戏,具有完整的引擎和大量的代码.
我已经尝试跟踪所有分配并确保它们在运行时没有被释放或忘记,以便在播放时不会调用GC.多数民众赞成基本上我能想到的所有,我不知道还有什么可以使它lagg
而且我怀疑它是网格的聚合数,因为即使它们是高质量的,我在游戏中添加了一个选项,让你可以选择低,中,高的图形质量,就像电脑游戏一样,低和高之间的差异介于600-900个顶点之间!我注意到的唯一改进是加载时间.此外,没有任何特殊的后处理效果,灯光,着色器,实时SSS或其中任何一种.只是纹理面孔:P
我正在做的"lagg"随机冻结.我很确定他们是GC,但它可能是别的,因为我认为我已经找到并控制了所有的分配(有很多).由于我的游戏是独立于帧速率的,每当它解冻时,玩家和敌人以及所有东西都"向前跳"以保持同步,这使得已经很难的游戏变得更加困难!
我是剖析和优化的新手.我如何使用android调试工具(或其他第三方工具)来更好地了解我的游戏在运行时的表现,以及何时/为什么它会冻结以便我可以修复它们.
此外,奖金问题:):有没有办法让我看到它如何在没有手机或知道拥有它们的人的情况下在其他手机上执行?比如,即使我没有Droid X也没有我知道的任何人,它在Droid X上的速度有多快
我的Windows 7计算机上安装了XAMPP.
我已经开发了一段时间了但是我的开发已经停止了,因为XAMPP我的PHP pages速度很慢.
它的运行速度非常慢,超过了我在PHP.ini文件中设置的30秒超时限制.
我不知道它可能会突然阻止它正常运行.
我尝试过以下方法:
但无济于事.
可能是我的MySQL数据库已损坏?
这不是我的MySQL查询很慢,因为我在我的网站上有完全相同的代码版本.
我只是在寻找纠正它的建议,以便我可以继续开发.
这是MySQL错误日志的最后一点
111119 17:24:11 [注意]插件'FEDERATED'被禁用.111119 17:24:11 InnoDB:InnoDB内存堆被禁用111119 17:24:11 InnoDB:Mutexes和rw_locks使用Windows互锁功能111119 17:24:11 InnoDB:压缩表使用zlib 1.2.3 111119 17:24:11 InnoDB:初始化缓冲池,大小= 16.0M 111119 17:24:11 InnoDB:完成缓冲池的初始化111119 17:24:11 InnoDB:支持的最高文件格式是Barracuda.111119 17:24:12 InnoDB:等待后台线程开始111119 17:24:13 InnoDB:1.1.8开始; 日志序列号1595675 111119 17:24:14 [注意]事件调度程序:已加载0事件111119 17:24:14 [注意] c:\ xampp\mysql\bin\mysqld.exe:准备连接.版本:'5.5.16'套接字:''端口:3306 MySQL社区服务器(GPL)111119 17:32:24 [注意] c:\ xampp\mysql\bin\mysqld.exe:正常关机
111119 17:32:24 [Note]事件调度程序:清除队列.0事件111119 17:32:24 InnoDB:开始关机... 111119 17:32:25 InnoDB:关机完成; 日志序列号1595675 111119 17:32:25 [注意] c:\ xampp\mysql\bin\mysqld.exe:关机完成
111119 17:33:26 [注意]插件'FEDERATED'被禁用.111119 17:33:26 InnoDB:InnoDB内存堆被禁用111119 17:33:26 InnoDB:Mutexes和rw_locks使用Windows互锁功能111119 17:33:26 InnoDB:压缩表使用zlib 1.2.3 111119 17:33:26 …
我们这里有一个非常大的程序,它混合了C++和FORTRAN(对不起).我的一次签到导致整个应用程序急剧减速(即两倍或更多) - 即使在代码中不受我的更改影响的区域也是如此.
事实:
几乎每个模块都减慢了相似的数量 - 甚至是那些不使用我的代码的模块.
可执行文件大约增加6%.
签入之间未更改元数据.
IDE /编译器处于发布模式的VS2010.
一些.lib文件的大小增加了一倍或三倍.
我看了一个大小增加了三倍的.lib文件,只有两个变化:
a)我已经包含了一个大型的头文件,而该文件又包含许多其他文件 - 其中一些包含中等复杂的内联代码."附加包含目录"已经从非一个或一个变为大约7个,因为每个头文件#include一个或多个其他头文件.
b)我从这个头文件中调用了4个函数,但是这些函数在运行期间没有被调用(即它们的执行不能减慢代码速度,但可能会包含它们).
尽管在论坛中搜索包含头文件是否会减慢执行速度(而不是编译),但我找不到一篇相关的文章.我的问题是:
?任何形式的头文件(声明或内联)的#inclusion是否会减慢代码执行速度?
?内联代码的执行速度是否存在定性或定量差异(我知道'内联'只是对编译器的建议)?
?.lib大小,.exe大小和执行速度之间有什么相关性(我期待这里有很多不同且相互矛盾的相关性)?
?将重构一些头文件,以便他们不需要包含其他文件(通过将这些包含放入.cpp文件,从而减少我的'其他包含目录')改善我的情况,你觉得呢?
我想最后一个问题是问题的关键,因为它需要付出很多努力......
我花了最后一周将一个递归的Branch&Cut算法从Matlab移植到C++,并希望看到解决方案时间显着减少,但是听起来令人难以置信,情况正好相反.现在我不是C++的专家,所以我下载了昏昏欲睡的探查器并试图找到潜在的瓶颈.我想问一下,我是否从中得出了正确的结论,或者我是否正在寻找一个完全错误的方向.
我让代码运行137秒,这就是分析器显示的内容(下面的许多其他条目,但它们并不重要):

因此,如果我做对了,花了98秒来创建新对象,花了34秒来释放内存(即删除对象).
我将通过我的代码,看看我能做得更好的地方,但我也想问一下你是否对产生这种行为的频繁错误或坏习惯有任何暗示.我想到的一件事是我在代码中使用了很多临时的std :: vector来计算东西,所以这可能很慢.
为了防止你失明,我不会在看了一会之前发布我的代码,但如果我不能自己解决这个问题,我会回来的.
我的应用程序的性能有一些问题。我在 Stackoverflow 上找到了这个答案:https : //stackoverflow.com/a/378024/5363
我喜欢。我不太明白的一点是代码优化和分析之间的关系是什么。因为显然有人想要分析优化的代码,但同时在优化过程中会丢失很多信息。那么在调试器中运行优化的代码并按照引用的答案中的建议进入它是否可行?
我在 Linux 下使用带有 gcc 的 CMake,如果这有什么不同的话。
我一直在使用 oprofile 来尝试找出为什么我的程序在内核中花费如此多的时间。我现在拥有来自内核的符号,但显然我的程序和内核之间没有链接可以告诉我程序的哪些部分花费了这么长时间。
samples % image name app name symbol name
-------------------------------------------------------------------------------
201 0.8911 vmlinux-3.0.0-30-generic vmlinux-3.0.0-30-generic _raw_spin_lock_irq
746 3.3073 vmlinux-3.0.0-30-generic vmlinux-3.0.0-30-generic rb_get_reader_page
5000 22.1671 vmlinux-3.0.0-30-generic vmlinux-3.0.0-30-generic default_spin_lock_flags
16575 73.4838 vmlinux-3.0.0-30-generic vmlinux-3.0.0-30-generic _raw_spin_lock
22469 11.1862 vmlinux-3.0.0-30-generic vmlinux-3.0.0-30-generic __ticket_spin_lock
22469 99.6010 vmlinux-3.0.0-30-generic vmlinux-3.0.0-30-generic __ticket_spin_lock [self]
26 0.1153 vmlinux-3.0.0-30-generic vmlinux-3.0.0-30-generic ret_from_intr
Run Code Online (Sandbox Code Playgroud)
我该去哪里?如何发现程序中导致 __ticket_spin_lock 的位置?
您使用哪个探查器用于MPI的Fortran代码库?gprof似乎没有正常工作.Sun Studio Analyzer仅返回C/C++系统调用的计时,并且不显示任何fortran函数.
我正在重构我制作的c ++ OpenGL应用程序(技术上,这是一个在Qt的QQuickItem类中大量使用瘦OpenGL包装器的应用程序).我的应用程序运行正常,但可能会更好.
我很好奇的一个问题涉及virtual在非常时间敏感(帧速率)算法中使用函数.我的OpenGL绘图代码virtual在需要绘图的各种对象上调用许多函数.由于这种情况每秒发生多次,我想知道virtual调度是否会降低帧速率.
我正在考虑更改为这个结构而不是通过将所有内容保存在一个基类中来避免继承,但是之前的virtual函数现在只包含switch基于类的"类型"调用适当例程的语句,这实际上只是typedef enum:
先前:
struct Base{
virtual void a()=0;
virtual void b()=0;
}
struct One : public Base{
void a(){...}
void b(){...}
}
Run Code Online (Sandbox Code Playgroud)
考虑到:
struct Combined{
MyEnumTypeDef t; //essentially holds what "type" of object this is
void a(){
switch (t){
case One:
....
break;
case Two:
....
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
当a()在OpenGL绘图例程中经常调用函数时,我很想认为Combined该类将更加高效,因为它不需要在虚拟表上进行动态调度.
如果这是明智的话,我会对这个问题提出一些建议.