Как улучшить производительность чтения сокетов? - PullRequest
1 голос
/ 27 марта 2012

Я тестировал производительность чтения потока ввода сокета сервера.Я обнаружил, что само чтение имеет задержку ~ 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 Ответ

1 голос
/ 27 марта 2012
String inputLine = null;

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

Если вы закомментируете строку чтения, вам нечего будет писать, так что фактически вы закомментируете обе строки, не так ли?

Ваши микро-тесты (которые кажутся немногоизворотливо для начала), вероятно, даст лучшую информацию, если у вас будет строка по умолчанию, которую save.write писал в каждой итерации.

Хороший и актуальный вопрос и ответ:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...