今天,我对得到的 Visual VM 分析结果感到困惑。
我有以下简单的Java方法:
public class Encoder {
...
private BitString encode(InputStream in, Map<Character, BitString> table)
throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
BitString result = new BitString();
int i;
while ((i = reader.read()) != -1) {
char ch = (char) i;
BitString string = table.get(ch);
result = result.append(string);
}
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
此方法从流中一次读取一个字符。对于每个字符,它查找它的位串表示形式,并将这些位串连接起来以表示整个流。
BitString 是一种自定义数据结构,它使用底层字节数组表示位序列。
该方法的性能非常差。问题在于BitString#append- 该方法创建一个新的字节数组,从两个输入 BitString 复制位并将其作为新的 BitString 实例返回。
public BitString append(BitString other) {
BitString result = new BitString(size + other.size); …Run Code Online (Sandbox Code Playgroud) 谁可以更快?为什么?
1:
Point point = new Point(25,25); //any numbers..
Point point2 = new Point(20,95); //any numbers..
Graphics g = CreateGraphics();
g.DrawLine(point,point2);
Run Code Online (Sandbox Code Playgroud)
要么
2:
Graphics g = CreateGraphics();
g.DrawLine(new Point(25,25),new Point(20,95));
Run Code Online (Sandbox Code Playgroud) 我在c#代码后面有一个方法......需要从Assemblies以及Child group Methods执行10000多行.我的问题是如何优化它?在我的页面中,我自己设计的gridview将超过40秒加载到500行.
寻找一些[免费软件/开源]工具,以便在win32平台上轻松分析一个大的PHP项目.需要找出最耗时的代码部分.循环时,很难手动为每个功能设置定时功能......
正如标题所暗示的那样:假设我们有一个复杂的程序,我们想让它更快,但我们可以.我们能否以某种方式检测哪些循环或其结构的其他部分占用大部分时间来进行优化?
编辑:注意,重要的是假设软件非常复杂,我们不能逐个检查每个循环或其他结构,将定时器放在其中等.
我正在尝试优化朋友给我的一大堆代码,但我的平均执行时间的基线是非常不稳定的,我迷失了为什么/如何修复它.
码:
#include <sys/time.h>
#include <time.h>
#include <stdio.h>
#include "wall.h" /* Where his code is */
int main()
{
int average;
struct timeval tv;
int i;
for(i = 0; i < 1000; i++) /* Running his code 1,000 times */
{
gettimeofday(&tv, NULL); /* Starting time */
start(); /* Launching his code */
int ret = tv.tv_usec; /* Finishing time */
ret /= 1000; /* Converting to milliseconds */
average += ret; /* Adding to the average */
}
printf("Average …Run Code Online (Sandbox Code Playgroud) 我正在做一个电子项目.在项目中我有一个微控制器.我想衡量一下我的变化对时间表现的影响.
二进制文件不是很大(实际上是11760字节).微控制器运行大约20Mhz(基于晶体值).所以基本上他每秒可以运行20M操作.
您是否认为根据每个功能的指令计数检查由于更改而导致的性能影响是否是个好主意?就像是 :

我只是想知道如果在程序中使用函数可以加快执行时间?
说,我有简单的二进制搜索程序
#include <stdio.h>
int main()
{
int c, first, last, middle, n, search, array[100];
scanf("%d",&n);
for ( c = 0 ; c < n ; c++ )
scanf("%d",&array[c]);
scanf("%d",&search);
first = 0;
last = n - 1;
middle = (first+last)/2;
while( first <= last )
{
if ( array[middle] < search )
first = middle + 1;
else if ( array[middle] == search )
{
printf("%d found at location %d.\n", search, middle+1);
break;
}
else
last = middle - …Run Code Online (Sandbox Code Playgroud) 替代标题:
实施分堆的东西更快的比std::priority_queue.
grpof给了我:
时间秒秒呼叫s /呼叫s /呼叫名称
84.12 105.54 105.54 320000 0.00 0.00 _ZN3RKDI24Division_Euclidean_spaceIfEE2nnEjRKStvectorIfSaIfEERKfRS3_ISt4pairIfiESaISB_EERiiPjRSt14priority_queueISt5tupleIJfiiEES3_ISJ_SaISJ_EESt7greaterISJ_EES9_RKjS7_S7_i
我相信这是我std::priority_queue在项目中唯一使用的.'Division_Euclidean_space'部分让我困惑,因为它是我的项目中不再使用的类/文件.
这是我使用的完全:
/**
* Min_heap is actually a std::priority_queue,
* with std::greater as a parameter.
*/
typedef std::priority_queue<std::tuple<float, int, int>,
std::vector<std::tuple<float, int, int> >,
std::greater<std::tuple<float, int, int> > > Min_heap;
Run Code Online (Sandbox Code Playgroud)
我使用第一个元素作为比较的关键.
正如我在回购中看到的那样,我只创建了一个Min_heap,我将它分为两部分:
if(...) {
branch.push(std::make_tuple(new_dist, other_child_i, tree_i));
}
Run Code Online (Sandbox Code Playgroud)
和
while (branch.size()) {
std::tie(new_mindist, node_i, tree_i) = branch.top();
branch.pop();
...
}
Run Code Online (Sandbox Code Playgroud)
我觉得如果我用其他东西替换这个数据结构,我的项目可能会运行得更快(超级优秀).有任何想法吗?
我在堆中推送物品一段时间,然后我弹出一个,我可能会推动其他项目等等.大多数时候我会停止另一个条件,而不是当堆变空时.
我读过性能方面的字符数组比std :: string更好/更快。但是我个人觉得使用std :: string更容易。
我目前正在编写一些数据库API,这些API会将数据提取/插入数据库中。在这些API中,我想使用std字符串,但是我不确定由于我的选择我会付出多少性能损失。我的API将查询数据库,因此将涉及网络IO。
性能损失是否比网络延迟(〜10 ms)少得多,因为在这种情况下,我很乐意使用std :: string。