如何提高套接字读取性能?

时间:2012-03-26 20:08:06

标签: java time

我一直在测试读取服务器套接字输入流的性能。我发现阅读本身有约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
......

如何提高阅读效果?客户端只是根据请求发送随机双点值。

谢谢,

1 个答案:

答案 0 :(得分:1)

String inputLine = null;

while (...) {
    ...
    inputLine = in.readLine(); //I found ~9000 ns delay in this line.
    save.write(inputLine);
    ...
}

如果您注释掉读取行,那么您将无需编写任何内容,因此实际上您正在评论这两行,不是吗?

如果您有一些save.write在每次迭代中写入的默认字符串,那么您的微基准测试(开始时似乎有点狡猾)可能会显示更好的信息。

良好且相关的问答: