Я возвращаю массив список формы объекта и использования его в другом. Приложение является многопоточным, и каждый поток заполняет список массивов по одному int за раз из файла, поэтому каждый add - это доступ к списку массивов. Есть 200 потоков с файлом в 1 миллион ints каждый. Для выполнения приложения требуется несколько часов, и я полагаю, что это моя шея бутылки, так как, когда я тестирую локальный список массивов, это занимает 4 минуты. Моя проблема заключается в том, что это используется везде, и мне нужно синхронизировать список массивов. Есть ли быстрое решение этой проблемы или я должен сделать так, чтобы каждый поток имел свой собственный список массивов и не возвращал его?Java возвращает ArrayList Slow?
На самом деле я был неправ, его единственный, когда массив является локальным для метода, который быстрее в любом месте, как объявлено в верхней части класса, требуется несколько часов, чтобы я работал.
Мой обратный код выглядит следующим образом:
synchronized public ArrayList<Integer> getData()
{
return this.myData;
}
Вот что работает медленно, я удалил другие вещи, и я пытаюсь репера на это, и это занимает несколько часов:
Scanner scanner = new Scanner(filePath);
/*
* While we have data keep reading
* when out of data the simulation is complete.
*/
while (scanner.hasNext())
{
/*
* Get the data to simulate requests
* and feed it to the algorithm being evaluated.
*/
if (scanner.hasNextInt())
{
int temp = scanner.nextInt();
//System.out.println(this.tClientName+" "+temp);
/*
* Add the temp value from incoming stream.
*
* todo:: UNLESS its NOT found on the client as a miss
*/
tClientCache.getCache().add(temp);
}
else
{
scanner.next();
}
}//END Of while (scanner.hasNext())
/*
* Close the scanner
*/
scanner.close();
Замените этот 'ArrayList', который не поддерживает синхронизацию с помощью' BlockingQueue'. Кроме того, проверьте, есть ли у вас синхронизированный метод, который может замедлить ваше приложение. –
Профиль, не догадываюсь. – Durandal
«один int за раз из файла» - почему? не могут ли они собирать все данные из файлов и только потом добавлять их в список с помощью addAll (...)? Было бы намного быстрее. Дайте нам больше кода и объясните это лучше, если вы хотите получить какую-либо помощь ... – WFranczyk