1
我一直在測試讀取服務器套接字輸入流的性能。我發現閱讀本身有大約9000納秒(9 us)的延遲。我怎樣才能提高其表現? 我已經嘗試過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千個觸發器產生1600個採樣。然後每次採樣點必須爲0.001/1600 = 0.000625 ms(0.625 us)。所以,9000 ns(9 us)是一個相當大的值。 – user1098761 2012-03-26 20:17:41
我明白了。祝你好運,你的優化。 – aioobe 2012-03-26 20:24:45
@ user1098761它是帶寬的1.5%。這真的是一個很大的價值嗎? – EJP 2012-03-26 21:59:32