![]() |
|
Модераторы: javastic, AntonSaburov |
![]()
|
|
| panik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 6.7.2009 Репутация: нет Всего: нет |
Здравствуйте!
Столкнулся с такой вот проблемой: получаю данные с Интернет и необходимо сохранить их в хранилище RMS Непосредственно запись (сохранение) происходит очень медленно (почти две минуты). Запись произвожу в цикле перебирая массив длиной примерно 460 значений. Как можно ускорить процесс записи в RMS? |
|||
|
||||
| W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
а код можно?
-------------------- iOS developer |
|||
|
||||
| Skynin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 2 Всего: 10 |
RMS вообще штука до жути медленная. Особенно на запись.
Общая потому рекомендация, если позволяет логика работы приложения: делаем кэширующую обвеску вокруг RMS, которая физически пишет в отдельном потоке, а в случае обращения на чтение - выдает закэшированные данные, которые могут быть еще не записаны физически. Недостаток - в случае последующих "операций записи" (=постановки их в очередь на физическую запись), на основе этих якобы записанных данных - возможна потеря данных если приложение завершится аварийно. Это сообщение отредактировал(а) Skynin - 6.7.2009, 15:35 |
|||
|
||||
| panik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 6.7.2009 Репутация: нет Всего: нет |
Вот кусок кода, отвечающий за запись в RMS:
ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); try { RecordStore recordStore = RecordStore.openRecordStore("weater", true); for(kk=0;kk<vi;kk++){ dos.writeUTF(valuearray[kk]); recordStore.addRecord(baos.toByteArray(), 0, baos.size()); } recordStore.closeRecordStore(); } catch(IOException ioe) {} catch(RecordStoreException rse){ System.out.println(rse.getMessage()); } Skynin, отдельным потоком писать это конечно как вариант интересен. Но в моем случае скорее не подойдет, т.к. после сохранения я хочу в вывести информацию на основе сохраненных данных и я так думаю пользователь быстро ознакомится с результатами и закроет программу раньше, чем сохранятся данные. |
|||
|
||||
| panik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 6.7.2009 Репутация: нет Всего: нет |
Придумал решение!!!
Теперь вместо сохранения в 2 минуты тратится всего секунда! Кому может интересно: делю массив данных по 100 значений. Между каждым значением ставлю разделитель и записываю в RMS Таким образом, в моем случае при примерно массиве данных длиной 460 значений, делю массив, например по 100 значений, ставлю разделители и записываю в RMS. В результает получаю 5 записей и сохраняются эти записи максимум 1 секунду. |
|||
|
||||
| W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
правильное решение, я чета всегда думал что значения одинаковой предметной области так и должны писаться по умолчанию, самое первое что я когда-то писал в RMS - логин/пароль, и это было в одной записи.
Да, и еще одно - при записи/удалении id не переписывается а продолжает свой счет, максимальный id, если не ошибаюсь, равен инту. вполне хватит конечно, но стоит просто об этом помнить =) -------------------- iOS developer |
|||
|
||||
![]()
|
FAQ раздела лежит здесь! |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java ME (J2ME) | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |