Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 1
Регистрация: 23.02.2015
Сообщений: 108

Ускорение работы/перевод на другой поток

30.01.2016, 22:26. Показов 1728. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня проблема:Очень долгий анмаршелинг если много объектов в xml

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
URL getUrl = new URL("https://api.vk.com/method/photos.getAll.xml?owner_id=" + id + "&count=40&access_token=" + token);
        int count = 40;
        InputStream inputStream = getUrl.openStream();
        String inputStreamString = new Scanner(inputStream,"UTF-8").useDelimiter("\\A").next();
        //System.out.println(inputStreamString.toString());
        JAXBContext context = JAXBContext.newInstance(PhotoResponse.class);
        Unmarshaller um = context.createUnmarshaller();
        PhotoResponse el2 = (PhotoResponse) um.unmarshal(new StreamSource(new StringReader(inputStreamString)));
        //System.out.println(el2.toString());
        String audios_list[] = el2.getPhoto().toString().substring(1).split("\n, ");
        photo = new Image[count];
        view = new ImageView[count];
        int x = 30;
        int y = 10;
        for(int i = 0;i < count;i++) {
            list = audios_list[i];
            String[] arg = audios_list[i].split(";");
            photo[i] = new Image(arg[3]);
            view[i] = new ImageView();
            view[i].setImage(photo[i]);
            view[i].setLayoutX(x);
            view[i].setLayoutY(y);
            view[i].setViewport(new Rectangle2D(0,0,75,50));
 
            if(x < 250){
                x = x + 80;
            }
            else
            {
                x = 30;
                y = y + 55;
            }
            group.getChildren().addAll(view[i]);
 
        }
вот код где производится десериализация и добавление фотографий
Как мне правильней перенести какую то нагрузку на другой поток или оптимизировать анмаршелинг?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.01.2016, 22:26
Ответы с готовыми решениями:

Ускорение работы регулярного выражения
Здравствуйте, написал регулярное выражение: String regExp = &quot;#start(\\s*.+)+#finish&quot;; Оно рабочее, но когда текстовый файл...

Ускорение работы приложения: опция -server в JVM
У меня получается, что опция -server убыстряет java до 1.5-2-х раз. Почему сервлет контейнеры типа томката не используют эту опцию по...

Ускорение работы JTabbedPane
привет. Используем в проекте таббедпане. Сам таббедпане из 8 закладок. В закладках есть таблица, короче все возможные поля ввода.. ...

16
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
30.01.2016, 22:36
Xeror, для начала найдите на каком фрагменте данного кода вы проводите больше всего времени (на какой строке). Затем можно будет думать как оптимизировать.
0
0 / 0 / 1
Регистрация: 23.02.2015
Сообщений: 108
30.01.2016, 22:58  [ТС]
KEKCoGEN, я увидел что больше всего времени уходит на цикл
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
30.01.2016, 22:59
Цитата Сообщение от Xeror Посмотреть сообщение
я увидел что больше всего времени уходит на цикл
судя по коду вряд ли. Как вы это увидели?
0
0 / 0 / 1
Регистрация: 23.02.2015
Сообщений: 108
30.01.2016, 23:01  [ТС]
добавил в разных местах System.out.println
все заходило мгновенно,а вот на завершение цикла уходит секунды 4-6
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
30.01.2016, 23:11
Xeror, добавьте вывод времени внутри цикла. Я не вижу там каких то долгих операций. Посмотрите как время распределяется внутри цикла

group.getChildren().addAll(view[i]);
можно вынести из цикла и добавлять один раз весь массив
0
0 / 0 / 1
Регистрация: 23.02.2015
Сообщений: 108
30.01.2016, 23:48  [ТС]
KEKCoGEN, на каждый цикл уходит около 90 милисекунд
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
30.01.2016, 23:54
Xeror, как эти 90 распределяются по строкам цикла?
0
0 / 0 / 1
Регистрация: 23.02.2015
Сообщений: 108
31.01.2016, 00:11  [ТС]
все время уходит на эту строчку:

JavaScript
1
photo[i] = new Image(arg[3]);
все остальное по 0

Это строка присваивания Image по ссылке на изображение
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
31.01.2016, 07:54
Xeror, скорее всего тут идет обращение к файловой системе и поэтому долго. Можно попробовать запараллелить цикл. Это может ускопить процесс.
0
0 / 0 / 1
Регистрация: 23.02.2015
Сообщений: 108
31.01.2016, 10:11  [ТС]
KEKCoGEN, я так вначале и хотел сделать поэтому спросил как)
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
31.01.2016, 10:25
Xeror, в джава 8 есть parallel stream
Думаю в более ранних версиях тоже можно что-нибудь найти
0
0 / 0 / 1
Регистрация: 23.02.2015
Сообщений: 108
31.01.2016, 11:25  [ТС]
KEKCoGEN, я подумал может сделать загрузку в отдельной нити а по мере загрузки присваивать ImageView загруженные изображения,только вот как это сделать))

Добавлено через 22 минуты
KEKCoGEN,
сделал метод:
Java
1
2
3
4
    public synchronized void setImage (int id,Image image)  {
        ava[id].setImage(image);
        System.out.println(id+" " + ava[id].getImage());
    }
Второй поток:
Java
1
2
3
4
5
6
7
8
9
10
11
    class SomeThing implements Runnable     //(содержащее метод run())
    {
        public void run()       
        {
            String[] arg = images.split(";");
            for(int i = 0;i<count;i++){
                Image z = new Image(arg[0]);
                setImage(i,z);
            }
        }
    }
Вылетает если сетит Image
но вот если оставить просто System.out.println то пишет нормально,в чем проблема?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
31.01.2016, 13:00
Цитата Сообщение от Xeror Посмотреть сообщение
Вылетает если сетит Image
но вот если оставить просто System.out.println то пишет нормально,в чем проблема?
Что в консоль пишет при вылете? Навскидку, предположу, что проблема в том, что доступ к UI-объектам возможен только из того же потока, в котором работает UI.
0
0 / 0 / 1
Регистрация: 23.02.2015
Сообщений: 108
31.01.2016, 15:42  [ТС]
korvin_,
Java
1
Exception in thread "Thread-196" java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-196
Добавлено через 1 час 5 минут
korvin_, как мне дать доступ всем потокам?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
31.01.2016, 23:19
Лучший ответ Сообщение было отмечено Xeror как решение

Решение

Цитата Сообщение от Xeror Посмотреть сообщение
как мне дать доступ всем потокам?
Почитав документацию? https://docs.oracle.com/javafx... hreads.htm
1
0 / 0 / 1
Регистрация: 23.02.2015
Сообщений: 108
01.02.2016, 01:12  [ТС]
korvin_, огромное спасибо за ссылку)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.02.2016, 01:12
Помогаю со студенческими работами здесь

Вызывающий поток не может получить доступ к объекту, так как его владельцем является другой поток
Есть форма MainWindo, есть класс AB. В форме единая точка доступа к элементам формы. public static MainWindow Forma = null; ...

[WPF] Вызывающий поток не может получить доступ к данному объекту, т.к. владельцем этого объекта является другой поток
Здравствуйте пытаюсь реализовать кросспоточное пополнение listbox в WPF С#, но и в итоге получаю следующую ошибку: void...

Ошибка: вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток.
Ошибка в &quot;progressBar1.Value += 50;&quot;, вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта...

Ускорение работы компьютера, а так же работы Интернета (u22)
Когда допустим, включаю компьютер, у меня очень долго стоит заставка &quot;Добро пожаловать&quot; а так же компьютер мой, очень долго приходит в...

Ускорение работы компьютера, а так же работы Интернета
Как ускорить работы компьютера, и чтобы ПРИСУТСТВОВАЛА БЕЗОПАСНОСТЬ моего компьютера? моих данных. Отключил службы: Центр...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru