powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Нужны библиотеки для быстрой работы с файлами
25 сообщений из 57, страница 2 из 3
Нужны библиотеки для быстрой работы с файлами
    #38972165
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
daged,

ну, подгонять файл под такое кол-во строк не интересно, лучше выложи file
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972167
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не выложу. В том, что эта проблема из-за скорости Java я уверен, проверять не надо. Надо подсказать библиотеки, либо сказать об их отсутствии.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972168
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну тогда успехов
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972173
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dagedНе выложу. В том, что эта проблема из-за скорости Java я уверен, проверять не надо. Надо подсказать библиотеки, либо сказать об их отсутствии.
Насколько чисты были условия эксперимента?

К примеру если ты на Windows-машине запускал тесты javа которые "прогревали"
кеш файловой системы то последующий запуск vbs.net уже находился в заведомо
других условиях и .net приложение использовало более быстрый IO.

Условия компилляций. К примеру jvm бывает клиентская (hotspot) и серверная.
И в варианте -client код может некоторое время работать в режиме интерпретатора
байткода. Это может влиять на декодирование кодовой страницы. Вобщем
тут надо курить опции -XX кажется.

Особые условия .net кода. Используя возможности более тесной интеграции
с ОС Windows какие-то части задачи (например та-же трансформация кодировок)
могут быть расчитаны в контексте ОС-Windows и существенно выигрывать.

Вобщем задача - эту надо решать комплексно а не в виде получения эррея
строчек. Ведь этот эррей нужно и аллоцировать и удалять из памяти. И эти
операции тоже имеют ненулевые накладные.

Ну вобщем полна коробочка.

И по чесноку ... надо еще прогнать этот-же тест на Linux-машине
с .net-ом. Чтобы рассмотреть все кейсы тык-скыть а не только на винде.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972181
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

может на пне третьем еще считает или дефрагментацию делал сто назад, а судя его код он не использует java 7
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972192
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>в заведомо других условиях

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

Попробую позапускать с разными опциями, если найду как их указывать в eclipse, но думаю результат не очень сильно изменится.

>более тесной интеграции

Что мешало сделать такую же тесную интеграцию разработчикам Java?

На линуксе придется использовать Mono вместо .Net Framework. А платформа Mono на некоторых задачах очень сильно тормозила когда я ее тестировал. Это даже было одной из причин почему я перешел с VB .Net.

Процессор мощный, тесты выполнял на Java 8.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972194
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот это мне делать нечего...
первый тест с файлом 1024Кб (25 тыс строк) занимает от 1109 до 1125 мс
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972203
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>от 1109 до 1125 мс

Уже ближе... Еще немного и будет как у меня :) Если конфигурация строку станет похожей...
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972205
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
врядли конфигурация строки может давать такую разницу
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972206
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно. Может быть еще влияет количество ядер процессора, тип ЖД.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972208
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
процессор у меня я бы не сказал, что мощный
с мощный было бы быстрее...
так что заблуждаешся ты в своих тестах
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972292
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dagedВ том, что эта проблема из-за скорости Java я уверен, проверять не надо. Надо подсказать библиотеки, либо сказать об их отсутствии.

Примерещилось. Возможная причина мерещения - кривые руки, написавшие быдлокод. С библиотеками порядок. Вопрос отвечен.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972301
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ТС.

Не помогут тебе библиотеки. Ты задачу свою изложи и почему тебя парит разница между 2 и 4 секундами.

Навскидку, разница между джавой и VB в том, что джаве после старта надо "прогреться" - она компилирует свой байткод выборочно, т.е. не сразу и только тот, который активно используется. Так что правильный способ сделать замеры - прогнать твой тест 101 раз в одном запуске - 100 раз вхолостую, а 101й с замером. И так же для VB.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972355
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>так что заблуждаешся ты в своих тестах

Мне так не кажется.

>процессор у меня я бы не сказал, что мощный

У меня 2 ядра.

>кривые руки, написавшие быдлокод

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

Видимо альтернативных библиотек нет, судя по тому, что о них никто даже не упоминает. Ну и ладно. Получилось наконец указать в Eclipse опцию -server и код действительно стал выполняться быстрее! Второй тест выполняется даже быстрее чем в VB .Net - около 1.7 секунд. Для этого указал в свойствах проекта JRE из JDK. А до этого среда ругалась на отсутствие папки server в JRE. Только теперь нужно будет использовать серверную JRE. Спасибо, mayton!

Вопрос закрыт.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972369
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dagedПолучилось наконец указать в Eclipse опцию -server и код действительно стал выполняться быстрее!
Собственно об интерпретации и был мой первый вопрос 17707652
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972419
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
daged>так что заблуждаешся ты в своих тестах
Мне так не кажется.

цифры полученные мной должны же о чем-то говорить

daged>процессор у меня я бы не сказал, что мощный
У меня 2 ядра.

у меня 3-х ядренный 3300Mhz
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972433
daged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>об интерпретации и был мой первый вопрос

Надо было поподробнее объяснить что это означает, что нужно поменять. Мне те слова ни о чем не говорили. Я недавно начала изучать Java и не знаю всех тонкостей ее работы.

>должны же о чем-то говорить

Я уже пояснил о чем они говорят. Разница в файлах, количестве ядер, жд, может еще что-то. Там немного, тут чуть-чуть и в итоге набирается такая разница.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972455
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daged>об интерпретации и был мой первый вопрос
Надо было поподробнее объяснить что это означает, что нужно поменять. Мне те слова ни о чем не говорили. Я недавно начала изучать Java и не знаю всех тонкостей ее работы.

Google -> Java microbenchmarks
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972525
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Я что-то не пойму в чем прикол...

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * @author lesinsa on 30.05.2015.
 */
public class Main {

    public static final String TEST_FILE = "test.txt";
    public static final int NLINES = 250000;

    public static void main(String[] args) throws IOException {

        long tw = System.currentTimeMillis();
        try (FileOutputStream outputStream = new FileOutputStream(TEST_FILE)) {
            for (int i = 0; i < NLINES; i++) {
                Writer writer = new BufferedWriter(new OutputStreamWriter(outputStream), 4 * 1024);
                writer.write(UUID.randomUUID().toString());
                writer.write(" ");
                writer.write(UUID.randomUUID().toString());
                writer.write(" ");
                writer.write(UUID.randomUUID().toString());
                writer.write(" ");
                writer.write(UUID.randomUUID().toString());
                writer.write(" ");
                writer.write(UUID.randomUUID().toString());
                writer.write("\n");
                writer.flush();
            }
        }
        tw = System.currentTimeMillis() - tw;
        System.out.println(String.format("Written %d line by %d ms", NLINES, tw));

        for (int i = 0; i < 25; i++) {
            long t = System.currentTimeMillis();
            ArrayList<String> strings = new ArrayList<>();
            try (FileInputStream inputStream = new FileInputStream(TEST_FILE)) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream), 32 * 1024);
                String s = reader.readLine();
                while (s != null) {
                    strings.add(s);
                    s = reader.readLine();
                }
            }
            t = System.currentTimeMillis() - t;
            System.out.println(String.format("Read %d line by %d ms", strings.size(), t));
        }


        System.out.println();
        System.out.println("Reading using Java NIO");


        for (int i = 0; i < 25; i++) {
            long t = System.currentTimeMillis();
            List<String> stroki = Files.readAllLines(Paths.get(TEST_FILE), Charset.defaultCharset());
            t = System.currentTimeMillis() - t;
            System.out.println(String.format("Read %d line by %d ms", stroki.size(), t));
        }
    }
}

C:\soft\jdk1.8.0_40\bin\java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:59373,suspend=y,server=n -Dfile.encoding=windows-1251 ............
Connected to the target VM, address: '127.0.0.1:59373', transport: 'socket'
Written 250000 line by 5208 ms
Read 250000 line by 216 ms
Read 250000 line by 178 ms
Read 250000 line by 175 ms
Read 250000 line by 175 ms
Read 250000 line by 178 ms
Read 250000 line by 172 ms
Read 250000 line by 174 ms
Read 250000 line by 175 ms
Read 250000 line by 175 ms
Read 250000 line by 174 ms
Read 250000 line by 175 ms
Read 250000 line by 174 ms
Read 250000 line by 234 ms
Read 250000 line by 174 ms
Read 250000 line by 176 ms
Read 250000 line by 174 ms
Read 250000 line by 175 ms
Read 250000 line by 174 ms
Read 250000 line by 175 ms
Read 250000 line by 175 ms
Read 250000 line by 175 ms
Read 250000 line by 175 ms
Read 250000 line by 174 ms
Read 250000 line by 174 ms
Read 250000 line by 174 ms

Reading using Java NIO
Read 250000 line by 205 ms
Read 250000 line by 169 ms
Read 250000 line by 171 ms
Read 250000 line by 167 ms
Read 250000 line by 168 ms
Read 250000 line by 168 ms
Read 250000 line by 168 ms
Read 250000 line by 166 ms
Read 250000 line by 169 ms
Read 250000 line by 165 ms
Read 250000 line by 167 ms
Read 250000 line by 167 ms
Read 250000 line by 193 ms
Read 250000 line by 167 ms
Read 250000 line by 166 ms
Read 250000 line by 165 ms
Read 250000 line by 166 ms
Read 250000 line by 167 ms
Read 250000 line by 167 ms
Read 250000 line by 166 ms
Read 250000 line by 167 ms
Read 250000 line by 166 ms
Read 250000 line by 167 ms
Read 250000 line by 168 ms
Disconnected from the target VM, address: '127.0.0.1:59373', transport: 'socket'
Read 250000 line by 179 ms

Process finished with exit code 0
И строк взял 250000, и файл получается в 44 МБ, а время чтения не превышает 200 мс.

С NLINES = 2500000, файл 441 МБ:
C:\soft\jdk1.8.0_40\bin\java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:60868,suspend=y,server=n -Xmx2048m -Dfile.encoding=windows-1251 ........
Connected to the target VM, address: '127.0.0.1:60868', transport: 'socket'
Written 2500000 line by 45044 ms
Read 2500000 line by 4075 ms
Read 2500000 line by 2954 ms
Read 2500000 line by 3745 ms
Read 2500000 line by 3549 ms
Read 2500000 line by 2689 ms
Read 2500000 line by 3367 ms
Read 2500000 line by 2818 ms
Read 2500000 line by 2802 ms
Read 2500000 line by 2358 ms
Read 2500000 line by 2752 ms
Read 2500000 line by 2700 ms
Read 2500000 line by 2754 ms
Read 2500000 line by 2598 ms
Read 2500000 line by 2866 ms
Read 2500000 line by 2626 ms
Read 2500000 line by 2764 ms
Read 2500000 line by 2672 ms
Read 2500000 line by 2831 ms
Read 2500000 line by 2623 ms
Read 2500000 line by 2907 ms
Read 2500000 line by 2638 ms
Read 2500000 line by 2886 ms
Read 2500000 line by 2700 ms
Read 2500000 line by 2959 ms
Read 2500000 line by 2677 ms

Reading using Java NIO
Read 2500000 line by 2755 ms
Read 2500000 line by 2518 ms
Read 2500000 line by 2936 ms
Read 2500000 line by 2739 ms
Read 2500000 line by 2676 ms
Read 2500000 line by 3085 ms
Read 2500000 line by 2743 ms
Read 2500000 line by 3158 ms
Read 2500000 line by 2764 ms
Read 2500000 line by 3006 ms
Read 2500000 line by 2778 ms
Read 2500000 line by 2663 ms
Read 2500000 line by 3081 ms
Read 2500000 line by 2634 ms
Read 2500000 line by 3001 ms
Read 2500000 line by 2887 ms
Read 2500000 line by 2994 ms
Read 2500000 line by 2736 ms
Read 2500000 line by 3057 ms
Read 2500000 line by 2899 ms
Read 2500000 line by 2650 ms
Read 2500000 line by 3076 ms
Read 2500000 line by 2626 ms
Read 2500000 line by 2974 ms
Disconnected from the target VM, address: '127.0.0.1:60868', transport: 'socket'
Read 2500000 line by 2816 ms

Process finished with exit code 0
Что я делаю не так?..
ЗЫ. Астрологи провозгласили неделю бенчмарков...
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972529
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему у меня получается 13 миллисекунд (?

что я делаю не так?
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972534
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGA. Несколько мыслей.

Оба варианта неявно используют java.nio.charset.CharsetDecoder.

Думаю что профилирование должно показать что декодирование блока байт
в блок символом потребляет основное время CPU.

Кстати я-бы предложил поработать с файл-исходником в формате UTF-16.

Есть еще оригинальный вариант. Отказ от работы со строками и переход
на работу с байтами (byte[]). Для win-1251 это почти полная аналогия. С++ часто
пользуется аналогией byte==char и за счёт этого на микро-бенчарках
почти всегда выигрывает. Платформеры в отличие от плюсов обязаны
конвертить всё и вся в unicode для внутреннего представления и проигрывают
на low-level задачах подобных этой.

Работа с byte[] позволит уйти от кодировок и вопрос "хранения" строк
трансформируется в вопрос "отображения". Тоесть мы переносим
проблему декодирования "на потом".
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972597
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
mayton,

Интуиция и опыт подсказывает, что все это несущественно. Ну не может быть так долго на таких копеечных размерах файлов. Помнится, когда лениво было разбираться со Stax, просто загонял в память XML-файлы в десятки мегабайт и выполнял XSLT-преобразование. Время выходило почти как описанные 4-5 сек.

Новый вариант бенчмарка, делает переконвертацию файла из UTF-16 в UTF-8. Вполне себе реальная задачка.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
import java.io.*;
import java.nio.charset.Charset;
import java.util.ArrayList;

public class Main {

    public static final String TEST_FILE = "war_and world.txt";
    private static final String TEST_OUTPUT_FILE = "war_and_world.utf8.txt";
    public static final String INPUT_ENCODING = "utf-16";
    public static final String OUTPUT_ENCODING = "utf-8";

    public static void main(String[] args) throws IOException {
        for (int i = 0; i < 10; i++) {
            long t = System.currentTimeMillis();
            ArrayList<String> strings = new ArrayList<>();
            try (FileInputStream inputStream = new FileInputStream(TEST_FILE)) {
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(inputStream, Charset.forName(INPUT_ENCODING)));
                String s = reader.readLine();
                while (s != null) {
                    strings.add(s);
                    s = reader.readLine();
                }
            }
            t = System.currentTimeMillis() - t;
            System.out.println(String.format("Read %d line by %d ms", strings.size(), t));

            long tw = System.currentTimeMillis();
            try (FileOutputStream outputStream = new FileOutputStream(TEST_OUTPUT_FILE)) {
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, OUTPUT_ENCODING));
                for (String string : strings) {
                    writer.write(string);
                    writer.write("\n");
                }
            }
            tw = System.currentTimeMillis() - tw;
            System.out.println(String.format("Written %d line by %d ms", strings.size(), tw));
            System.out.println();
        }
    }
}

В качестве данных загнал все тома "Войны и мира" отсюда . Получилось 50000 строк и >6МБ текста в кодировке UTF-16.

Вот результаты:
Read 50070 line by 81 ms
Written 50070 line by 74 ms

Read 50070 line by 65 ms
Written 50070 line by 42 ms

Read 50070 line by 40 ms
Written 50070 line by 38 ms

Read 50070 line by 39 ms
Written 50070 line by 38 ms

Read 50070 line by 44 ms
Written 50070 line by 39 ms

Read 50070 line by 41 ms
Written 50070 line by 41 ms

Read 50070 line by 54 ms
Written 50070 line by 38 ms

Read 50070 line by 39 ms
Written 50070 line by 40 ms

Read 50070 line by 38 ms
Written 50070 line by 41 ms

Read 50070 line by 42 ms
Written 50070 line by 41 ms

Process finished with exit code 0


dagedНе выложу. В том, что эта проблема из-за скорости Java я уверен, проверять не надо .Ну уж нет, мы проверим! Сдается мне, что хлопчик троллит.dagedНадо подсказать библиотеки, либо сказать об их отсутствии.Не, надо забанить школьника, чтобы не пистел.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972600
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WGAСдается мне, что хлопчик троллит.
А бы ли мальчик?

dagedЯ недавно начала изучать Java и не знаю всех тонкостей ее работы.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972602
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
видимо он делает много операций со строками, вот и получает тормоза.
...
Рейтинг: 0 / 0
Нужны библиотеки для быстрой работы с файлами
    #38972605
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WGA,

зачем выдумываешь свой тест?
делай тогда уже как все, в цикле должно быть 100, а файл 25000 строк, 1Мб
сделай хотя бы NIO
...
Рейтинг: 0 / 0
25 сообщений из 57, страница 2 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Нужны библиотеки для быстрой работы с файлами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]