我一直在测试读取服务器套接字输入流的性能。我发现阅读本身有约9000纳秒(9美元)的延迟。如何改善其性能? 我已经尝试过JAVA默认缓冲区大小和比这更大的东西。但它的表现并没有太大变化。在这种情况下,我计算了来自客户的每1600个样本。
大多数延迟都在这一行中找到:
inputLine = in.readLine();
以下是阅读帖子的代码:
PrintWriter out = new PrintWriter(door.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(door.getInputStream()), 10240);
File file = new File(this.storageDirectory);
BufferedWriter save = new BufferedWriter(new FileWriter(file));
String inputLine = null;
while(Switch)
{
inputLine = in.readLine(); //I found ~9000 ns delay in this line.
save.write(inputLine);
if(iCounter==0)
StartTime = System.nanoTime();
iCounter++;
if(iCounter>=1600) //need to store them.
{
EndTime = System.nanoTime();
TimeTick = (EndTime - StartTime)/1600;
System.out.println("TimeTick is [ns]: " + TimeTick);
iCounter = 0;
}
}
结果如下:
TimeTick is [ns]: 9241
TimeTick is [ns]: 9941
TimeTick is [ns]: 6535
.....
这是没有'inputLine = in.readLine();'的结果
TimeTick is [ns]: 0
TimeTick is [ns]: 0
TimeTick is [ns]: 1
......
如何提高阅读效果?客户端只是根据请求发送随机双点值。
谢谢,
答案 0 :(得分:1)
String inputLine = null;
while (...) {
...
inputLine = in.readLine(); //I found ~9000 ns delay in this line.
save.write(inputLine);
...
}
如果您注释掉读取行,那么您将无需编写任何内容,因此实际上您正在评论这两行,不是吗?
如果您有一些save.write
在每次迭代中写入的默认字符串,那么您的微基准测试(开始时似乎有点狡猾)可能会显示更好的信息。
良好且相关的问答: