如果没有定义明确的性能要求,是否知道如何进行性能和可伸缩性测试?
有关我的申请的更多信息.
该应用程序有3个组件.一个组件只能在Linux上运行,另外两个组件是Java程序,因此它们可以在Linux/Windows/Mac上运行......这3个组件可以部署到一个盒子中,或者每个组件可以部署到一个盒子中.部署非常灵活.仅Linux组件将通过网络捕获原始TCP/IP包,然后一个Java组件将从中获取这些原始数据并将它们组装到最终用户将需要的数据中,并将它们作为数据文件输出到硬盘.最后一个Java组件将数据从数据文件批量上传到我的数据库.
在我正在进行的当前项目中,我遇到了一段似乎过于夸张的代码.我考虑重写它以避免内存中的对象超出需要,并且难以决定重构的性能是否值得花时间,以及当前设计是否会影响应用程序生命周期中的任何阶段的性能因此需要改变.
我意识到我没有回答这些问题的知识.我需要哪些知识来准确评估代码设计的性能?有谁知道有关C#/ Java内部工作的任何有用的资源有助于我的理解?
我有很多代码需要优化并使其运行得更快.我用opreport告诉我代码花了很多时间.我使用以下命令来获取统计信息
opreport -g -l -d
Run Code Online (Sandbox Code Playgroud)
使用不同的标志可以获得建议以获得更好的统计数据,也许每个行号而不是功能号找到它.
因此,我所看到的很多问题都与以下方面有关:
我希望编译器能够更好地优化代码,从而帮助他.我将一些代码块分解为带有字限制的函数,告诉编译器我的指针数组不重叠.
所以我正在寻找(a)可以使代码运行更长时间的常见C结构和(b)如何帮助编译器优化代码.
谢谢
Java编程语言中最昂贵的(字节码和cpu周期)语句是什么?
我有以下代码(这是用于演示的部分伪代码):
void foo(...){
//some code here
do{
min_item = _MAX_VALUE;
//some code here also
if (min_item == _MAX_VALUE)
break;
if (smaller_item_x == min_item){
FIRST_IS_SMALLER:
global_queue[size++] = smaller_item_x;
if (next_item_x!=0){
smaller_item_x= next_item_x;
if (smaller_item_x > smaller_item_y)
goto SECOND_IS_SMALLER;
}
}else{
SECOND_IS_SMALLER:
global_queue[size++] = smaller_item_y;
if (next_item_y!=0){
smaller_item_y= next_item_y;
if (smaller_item_y > smaller_item_x)
goto FIRST_IS_SMALLER;
}
}
}while(true)
Run Code Online (Sandbox Code Playgroud)
据我所知goto在汇编程序中被转换为jmp,我有兴趣通过将第二个goto更改为类似于branch的命令来增加此过程的性能(较短的命令与短跳转),我可能会遗漏一些东西,它可以是琐碎的,所以我道歉.
正如标题所暗示的那样:假设我们有一个复杂的程序,我们想让它更快,但我们可以.我们能否以某种方式检测哪些循环或其结构的其他部分占用大部分时间来进行优化?
编辑:注意,重要的是假设软件非常复杂,我们不能逐个检查每个循环或其他结构,将定时器放在其中等.
我正在运行一个模拟,需要一些时间来运行,我想改进它.根据我的理解,将值传递给函数意味着复制的值很慢.有没有办法在一个专用文件中包含一些函数,我不需要复制值?
我不介意做"错误的编程"(全局变量,公共访问等)以获得速度.
谢谢
编辑:当我开始我的项目时,我测试了几个循环.我计算了这种循环的开始和结束之间的处理器风格:
int i = 0;
while (i < 10000000){
i = doStuff(i); //or doStuff();
}
int doStuff(i){
return i++;
}
int doStuff(){
return i++;
}
Run Code Online (Sandbox Code Playgroud)
我很确定doStuff()案例的速度要快10倍.我已将我以前的代码更改为全局变量和直接访问("错误的编程"),它显着改善了我的运行时间.我试图使用引用,但我有一些固有的问题阻止我这样做(我不记得它是什么).无论如何,我现在正在玩gprof.
optimization ×4
performance ×4
c ×3
c++ ×3
bytecode ×1
c# ×1
caching ×1
debugging ×1
gcc ×1
gdb ×1
java ×1
object ×1
profiling ×1
scalability ×1
testing ×1