Одновременное создание нескольких файловJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Одновременное создание нескольких файлов

Сообщение Anonymous »

Я пытаюсь переписать приложение C# на Spring Boot Java. Приложение C# создает около 150 больших файлов с помощью Parallel.ForEach
и завершается менее чем за 8 минут, тогда как приложение Java занимает около 20 минут
Parallel.ForEach(
_ClientFileList,
new ParallelOptions() { MaxDegreeOfParallelism = FileCreation_ThreadQuantity },
x => CreateFile(x)
);

Программа сначала вызывает хранимую процедуру, которая возвращает набор результатов с информацией, необходимой для создания файла. Каждая строка результирующего набора содержит идентификатор файла, путь для сохранения файла и имя (другой процедуры хранения), которая получает
данные для помещения в файл. Каждая строка этого набора результатов сохраняется в объекте ClientFile, добавленном в список, который называется client_file_info.
Методprocess() затем берет время из списка и вызывает каждую хранимую процедуру (которая и записывает данные, возвращаемые
хранимой процедурой, по указанному пути.
Вот метод Process(), использующий BufferedWriter.
public void process(ClientFile client_file)
{
BufferedWriter writer = new BufferedWriter(new FileWriter(exportFile.FileDestination), 65536); //65536 32768
BufferedWriter ftpWriter = new BufferedWriter(new FileWriter(exportFile.FTPDestination), 65536);
CallableStatement callableStatement = connection.prepareCall("call getInfo (?) }")
int i = 0;
callableStatement.setString(++i, client_file.id);
ResultSet files = ResultSet rs = callableStatement.getResultSet();
if(files != null)
{
while(files.next())
{
writer.write
}
}
}


Я пробовал использовать ParallelStream() и CompletableFutures в методе run() следующим образом, но это занимает около 30 минут, что
столько же времени потребовалось до добавления «многопоточность». Я не обозначил методprocess()
private ClientFile client_file;
private List client_file_list = new ArrayList();

public void run(String... args) {
client_file_list = getClientFileList();
client_file_list.parallelStream().forEach(x -> { client_file.process(x); } );
}

CompletableFuture future = CompletableFuture.runAsync(() -> {
client_file_info.forEach( x -> {client_file.process(x); });
});

@Bean(name = "asyncExecutor")
public ThreadPoolTaskExecutor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(15);
executor.setMaxPoolSize(20);
executor.setQueueCapacity(2050);
executor.setThreadNamePrefix("poolThread-");
executor.initialize();
return executor; }


Подробнее здесь: https://stackoverflow.com/questions/790 ... ltaneously
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»