Перейти к публикации
  • Сейчас на странице   Всего пользователей: 2   (0 пользователей, 2 гостя)

Rooster

Программирование, т. 8

  

315 пользователей проголосовало

У вас нет прав на голосование в этом опросе, или на просмотр результатов опроса. Пожалуйста, войдите или зарегистрируйтесь для голосования в опросе.

Рекомендованные сообщения

aezakmi


Shaman.png.0cdd33d48561cd068bb3c5ee78289381.png Anna.jpeg.03c9b49363298ceec256500a5d522f7d.jpeg Nigga.jpg.f807f2556bdbf68452292a9301494591.jpg

 

Поделиться сообщением


Ссылка на сообщение
(изменено)

в смысле InputStreamReader, OutputStreamWriter?

я не мпомню какие стримы в джаве

я ток щас твой код глянул на самом деле, ты их уже юзаешь

 

один из способов ускорить это не насиловать память и вместо того чтоб держать список, сразу отправлять строку на выходной стрим

второй это читать неполные строки и брать столько символов чтоб оно всегда влезало в типичные размеры буфферов, сколько они там обычно - 256/1024 байт?

тут уже не уверен поможет оно или нет, но попробовать стоить, наверняка конкатенация строк чего-то да стоит по перформансу если строка не влезет полностью в буффер

 

edit: строка = line


Изменено пользователем TheDeadSkin
Ramil понравилось это

Поделиться сообщением


Ссылка на сообщение
    private File removeInvalidChars(File xml) {
        Path path = xml.toPath();
        File tmp = new File(xml.getParent() + File.pathSeparator + "tmp");
        try (BufferedReader reader = Files.newBufferedReader(path);
             BufferedWriter bufferedWriter = Files.newBufferedWriter(tmp.toPath());) {
            String currentLine = null;
            while ((currentLine = reader.readLine()) != null) {
                bufferedWriter.write(pattern.matcher(currentLine).replaceAll(""));
                bufferedWriter.newLine();
            }
            bufferedWriter.flush();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        xml.delete();
        tmp.renameTo(xml);
        return xml;
    }

Вариант с двумя стримами на NIO, офк должен быть перм на создание файлов то се хуе мое.

Ramil понравилось это

Поделиться сообщением


Ссылка на сообщение

при его размерах файлов наличие/отсутствие промежуточного буфера стоит ровно нихуя, тк скорость записи на диск всё равно на порядков 5 будет ниже.

 

есть шанс разве что при знании кодировки читать в фиксированной длины буфер и заменять байты в нем проходя по списку запрещенных, а не регуляркой по строке, тк это как минимум плодит новую строку, хз если ли в джаве доступ к внутренностям строки чтоб менять в ней по живому, без создания копии.

Ну и потом запись этого буфера байт в выходной поток

 

 

но при всё при этом, я очень сомневаюсь что после выноса компиляции регекса или переделки на простой фильтр по списку символов профайлер покажет что-то отличное от 95% времени чтение/запись в файл, 5% времени обработка

так что всё хуйня миша


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

Сделал тест лол

Первоначальный вариант:14 нс
NIO с паттерном:16 нс
Первоначальный вариант с компилированным паттерном:3 нс

точнее там не нс а мс)
щас файл раздую до 50мб


На 78мб файлах

Первоначальный вариант:8199 мс
NIO с паттерном:1688 мс
Первоначальный вариант с компилированным паттерном:3818 мс
Arzanis понравилось это

Поделиться сообщением


Ссылка на сообщение
(изменено)

чето я не понял в чем проблема в цикле по стриму почарово идти?

 

 

nextChar = inputStream.readCharacter

if (nextChar not in forbidden) outputStream.write(nextChar)

 

мне кажется это макс перформанс

 

а уже внутри все эти аутпут стримы будут записывать куда че хочешь как надо, тобишь создаешь bufferedStream и буферы оптимального размера у тебя из коробки делают всё что надо


 

Сделал тест лол

Первоначальный вариант:14 нс
NIO с паттерном:16 нс
Первоначальный вариант с компилированным паттерном:3 нс

точнее там не нс а мс)
щас файл раздую до 50мб


На 78мб файлах

Первоначальный вариант:8199 мс
NIO с паттерном:1688 мс
Первоначальный вариант с компилированным паттерном:3818 мс

я надеюсь у тебя тест не на единичный вызов, а вызовы на сотню-другую похожих файлов и данное значение - это среднее по вызову а не единичный  замер

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


Изменено пользователем Just.Doit

 

очень крутые котейки

RqvSzvr.png


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение

 

 

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

 https://i.imgur.com/iciKzGH.png

Ну а методы выше 


Офк это средняя температура по больнице, ибо без учетов прогревов, на ссд хуе мое


Ещё сделал со старыми IO буферами

Прогрев:15028 мс
Первоначальный вариант:6062 мс
NIO с паттерном:1689 мс
IO с паттерном:1860 мс
Первоначальный вариант с компилированным паттерном:2042 мс

Говорю же цикличная компиляция паттерна в "replaceAll" - зло производительности. Так что если в жабе нужно матчить, то лучше его сразу собрать.


Взял ещё сделал 500мб файлы (размноженные кучу раз pom'ы)
И по такой регулярке "[<>\\/]" их прочесал  :blnate:

Первоначальный вариант:18135 мс
NIO с паттерном:6874 мс
IO с паттерном:6881 мс
Первоначальный вариант с компилированным паттерном:9677 мс

Поделиться сообщением


Ссылка на сообщение
(изменено)

 

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

 iciKzGH.png

Ну а методы выше 

Офк это средняя температура по больнице, ибо без учетов прогревов, на ссд хуе мое

Ещё сделал со старыми IO буферами

Прогрев:15028 мс
Первоначальный вариант:6062 мс
NIO с паттерном:1689 мс
IO с паттерном:1860 мс
Первоначальный вариант с компилированным паттерном:2042 мс

Говорю же цикличная компиляция паттерна в "replaceAll" - зло производительности. Так что если в жабе нужно матчить, то лучше его сразу собрать.

Взял ещё сделал 500мб файлы (размноженные кучу раз pom'ы)

И по такой регулярке "[<>\\/]" их прочесал  :blnate:

Первоначальный вариант:18135 мс
NIO с паттерном:6874 мс
IO с паттерном:6881 мс
Первоначальный вариант с компилированным паттерном:9677 мс

бля. ты позапускай тесты хотябы раз 100-1000

 

ну и меряешь ты хуй пойми что

вычитай файл в память

первоначальные твои тесты по 3-15нс - вообще рофл. у замерщика времени погрешности в целые микросекунды могут быть (зависит от ос и загрузки)

вообще чтобы понимать хоть чучуть по теме посмотри 


Изменено пользователем Just.Doit

 

очень крутые котейки

RqvSzvr.png


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение

 

 

вообще чтобы понимать хоть чучуть по теме посмотри 

:megapalm: 

я это видео смотрел 100 лет назад, а ещё раньше статьи по сабжу на хабре читал, я прекрасно понимаю что мой бенчмарк не претендует на какую-то точность, просто пусть скомпилит паттерн

Поделиться сообщением


Ссылка на сообщение
(изменено)

 

вообще чтобы понимать хоть чучуть по теме посмотри 

:megapalm:

я это видео смотрел 100 лет назад, а ещё раньше статьи по сабжу на хабре читал, я прекрасно понимаю что мой бенчмарк не претендует на какую-то точность, просто пусть скомпилит паттерн

 

ну сорян

ты производишь впечатление джуна который и файл обработать не может и разницу в getCurrentTimeMillis считает показателем перформанса, и с ejb разобраться не смог

мне сложно представить кейс где ты несколько лет назад смотрел подобного рода видео и к текущему моменту остался на таком уровне

хм, возможно ты фронтендер..? и программирование на жава у тебя эпизодическое и по фану, странно это всё. 


Изменено пользователем Just.Doit

 

очень крутые котейки

RqvSzvr.png


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение
    private File removeInvalidChars(File xml) {
        Path path = xml.toPath();
        File tmp = new File(xml.getParent() + File.pathSeparator + "tmp");
        try (BufferedReader reader = Files.newBufferedReader(path);
             BufferedWriter bufferedWriter = Files.newBufferedWriter(tmp.toPath());) {
            String currentLine = null;
            while ((currentLine = reader.readLine()) != null) {
                bufferedWriter.write(pattern.matcher(currentLine).replaceAll(""));
                bufferedWriter.newLine();
            }
            bufferedWriter.flush();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        xml.delete();
        tmp.renameTo(xml);
        return xml;
    }

Вариант с двумя стримами на NIO, офк должен быть перм на создание файлов то се хуе мое.

 

сделал так, примерно на 0,5 сек быстрее стало с 2 до 1,5


javascript:void(0);

Поделиться сообщением


Ссылка на сообщение

 

 

наверняка конкатенация строк чего-то да стоит по перформансу

кмк конктатенация строк всегда дороже из-за имутабельности строк, не? 


:buba:

ни мало ни много, а много и мало

Поделиться сообщением


Ссылка на сообщение

 

хм, возможно ты фронтендер..? 

 

ну и че ты людей то оскорбляешь сразу?


Лишь ощутив баттхерт до конца, мы обретаем свободу

bf4ffc239860.png

Поделиться сообщением


Ссылка на сообщение

 

 

хм, возможно ты фронтендер..? 

 

ну и че ты людей то оскорбляешь сразу?

 

он окрасил себя в тот цвет в который окрасил себя


Публикация отключена

Поделиться сообщением


Ссылка на сообщение

@@AskMe-

вы на 8 сидите или повыше сели?


:buba:

ни мало ни много, а много и мало

Поделиться сообщением


Ссылка на сообщение

@@AskMe-

 

вы на 8 сидите или повыше сели?

выше 8ки проектов не видел пока вживую


Лишь ощутив баттхерт до конца, мы обретаем свободу

bf4ffc239860.png

Поделиться сообщением


Ссылка на сообщение
(изменено)

Здарова мужики, посоветуйте книгу по webgl какую-нибудь поновее

Нужно написать ща за пару месяцев жесткий диплом, на кону красная корка магистратуры.
Реально помимо фул тайм работы фронтычем разобраться в webgl и написать диплом и не подохнуть?
Естественно буду юзать three.js, но во всяких основах надо тоже охуенно шарить, препод жесткий мозгоеб.


Изменено пользователем banale*

Поделиться сообщением


Ссылка на сообщение

я в бытность универскую помню просто делал эстимейты х3, а не х2 как обычно и половину рабочего времени ебашил диплом 

Поделиться сообщением


Ссылка на сообщение

 

наверняка конкатенация строк чего-то да стоит по перформансу

кмк конктатенация строк всегда дороже из-за имутабельности строк, не?

 

мутабельность не особо поможет конкатенации если ты не выделил заранее всю память под строку, т.к. если всё не влезает в твой блок то ты по-любому должен выделить новый

и тут я не знаю как работает рантайм джавы, он сам управляет кучей и умеет в нормальный аналог realloc() или он каждый раз нативно просит память и тогда реаллок точно юзать не будут ни для чего

короче тут всё упирается в память, а не в непосредственно иммутабельность

чето я не понял в чем проблема в цикле по стриму почарово идти?

немного оверкилл каждый раз для этого делать кучу вызовов и дрочить ИО

буфферы именно для этого и существуют какбе

choojoykin понравилось это

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...