Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 09.03.2010, 14:21   #1
Roman_V
Оператор ЭВМ
 
Регистрация: 24.02.2010
Сообщений: 29
Написано одно полезное сообщение
большие тормоза при работе с FlashCard

на флэшке есть куча файлов (>5000). и при поиске файлов проходит 10 секунд до того как найдет. Карту попробую поменять, сформатировать. Разбить на подкаталоги не могу. есть предложения как ускорить процесс доступа к файлам?
средствами телефона по папке гуляю, но это не показатель. так как моя скорость нажатия на кнопки куда ниже чем поиск
(Offline)
 
Ответить с цитированием
Старый 09.03.2010, 15:03   #2
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: большие тормоза при работе с FlashCard

Флешкарты очень слабы в random-access доступе, однако форматирование карты в ntfs может решить эту проблему отчасти. Однако невсе устройства ntfs понимают.
__________________
(Offline)
 
Ответить с цитированием
Старый 09.03.2010, 16:38   #3
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: большие тормоза при работе с FlashCard

Лучше распихать всё по подпапкам (где-то по 100 файлов), хоть какой-то прирост производительности.
(Offline)
 
Ответить с цитированием
Старый 09.03.2010, 23:01   #4
Roman_V
Оператор ЭВМ
 
Регистрация: 24.02.2010
Сообщений: 29
Написано одно полезное сообщение
Ответ: большие тормоза при работе с FlashCard

Господа, а не потестите ли эту прогу на телефонах? В эмуляторе то работает, а вот в телефоне у меня зависает после открытия. ждал 10 минут, так ничего и не считалось. Если ставлю
skip(20);
str:=read_bytes(0,10);
то считывает. Вот и не понятно что не работает. Файл надо около 120-200 мегабайт чтобы был. Не важно что считается, главное чтобы все прошло нормально. И сама функция read_bytes(int off, int len) по сути должна считывать len байт начиная с off как я понял, но если я ставлю хотя бы 1 первым параметром, а не 0, то строка не возвращается. Поэтому я перед ней использую skip. Все бы хорошо, если бы работала на телефоне. Это родилось как идея в продолжение моего поста. Подумал что если поиск внутри одного но огромного файла будет быстрее то почему бы нет. А тут опять глюки. Потестите пожалуйста или предложите вариант чтения LEN байт по OFF смещению из файла. Спасибо!

program Files;
uses jsr75i;
var
nm,path,str: String;
o: Integer;
begin
path:='MemoryCard:/data/base.txt'; // файл размером 200 Мб. любой
o:=open_file(path);
if o=1 then DrawText('Открыто',0,0)
else DrawText('Ошибка!',0,0);
repaint;

skip(132407727); // смещение от начала файла
str:=read_bytes(0,10); // читаю 10 байт
DrawText(str,0,20);
DrawText(IntegerToString(length(str)),0,40);

o:=close_file(path);
if o=1 then DrawText('Закрыто',0,60)
else DrawText('Ошибка!',0,60);
repaint;
end.
(Offline)
 
Ответить с цитированием
Старый 10.03.2010, 01:59   #5
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: большие тормоза при работе с FlashCard

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

С таким большим файлом мало какой телефон справится.

Набор файлов известен заранее (как в БД) или нет (просто данные пользователя)?

Если известен - составить заранее список, чтобы не использовать поиск + флеш дефрагментировать.

2 SBJoker: к сожалению, я пока не видел мобильников, держащих NTFS, да и ставить NTFS на 2-4 ГБ флеш ИМХО нерационально, слишком она "тяжелая" сама по себе.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Rock2roll (10.07.2010)
Старый 10.03.2010, 02:04   #6
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: большие тормоза при работе с FlashCard

К тому же NTFS при каждой операции с файлом все протоколирует (начало операции, конец операции, результат операции) что не прибавляет скорости при работе с файлами. Так что даже к счастью, что NTFS не поддерживается мобильниками.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Rock2roll (10.07.2010)
Старый 10.03.2010, 10:15   #7
Roman_V
Оператор ЭВМ
 
Регистрация: 24.02.2010
Сообщений: 29
Написано одно полезное сообщение
Ответ: большие тормоза при работе с FlashCard

ODD набор файлов известен и фиксирован. Дефрагментации нет так как я заливаю все разом на чистую флэш. Вот и хотел сделать из кучи мелких файлов один большой. И индексный файл где будут хранится названия файлов и смещения в огромном файле. Ну в общем типа FAT и получается. Но блин не прокатило у меня пока на примере выше. Сейчас буду пробовать на каком смещении повиснет. Буду увеличивать смещения. Может библиотека не поддерживает такие смещения...
(Offline)
 
Ответить с цитированием
Старый 10.03.2010, 10:29   #8
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: большие тормоза при работе с FlashCard

ну ntfs имеет массу преимуществ, хотя бы распределенная таблица fat с поиском файла по дереву что снижает число переборов до десятка, в то время как в fat32 поиск идёт полным перебором файлов.

К тому же в fat32 все файлы лежат в одной "папке", т.е. на одном уровне вложенности, отличия лишь в пути файла, который является частью имени файла, и вся строка от корня диска до имени файла и есть запись файла в fat32.

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

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

Итог таков: записывать на карту лучше сразу подготовленными блоками из буфера, читать большие блоки в буфер. Т.е. организовать программный кеш.
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Rock2roll (10.07.2010)
Старый 10.03.2010, 11:00   #9
Roman_V
Оператор ЭВМ
 
Регистрация: 24.02.2010
Сообщений: 29
Написано одно полезное сообщение
Ответ: большие тормоза при работе с FlashCard

Попробовал считывать 10 байт постепенно увеличивая смещение. Получился тупняк. Если смещения до 100 000 байт (точно не стал выяснять сколько) то все работает быстро. Но потом стал делать смещения по мегабайтам и десяткам мегабайт и начались чудеса. В проге сделано так что после чтения 10 байт идет сразу вывод на экран содержимого и индекс. Так как содержимое квадратиками, то хоть как то идентифицировать. Так вот телефон думает 2 минуты. не выдает ни одного сообщения. Даже на 100 000 байтном смещении. Зато по прошествии 2 минут выдает сразу по всем смещениям данные. И 128 Мб в том числе. Repaint стоит после каждого DrawText тут я не ошибся. Такое впечатление что библиотека jsr75i как то глючит. Как будто буферизирует и пока все не считает не отдаст. Не знаю как это так может быть. Какие мысли?

А по поводу как работает flash, так это я знаю. Я делал Mp3 плеер на ней аппаратный. Блочное обращение к ней по 512 байт. Это ясно. Но работают они шустро (мне бы этой скорости хватило). Я то не пишу на нее, а только читаю.

Я то хотел этим экспериментом посмотреть на каком смещении у меня зависнет телефон. А оказалось что он как то ждет всех обращений к flash а потом пачкой выдает. Может есть другая библиотека для чтения N-байт файла по K-смещению?
(Offline)
 
Ответить с цитированием
Старый 10.03.2010, 12:06   #10
Roman_V
Оператор ЭВМ
 
Регистрация: 24.02.2010
Сообщений: 29
Написано одно полезное сообщение
Ответ: большие тормоза при работе с FlashCard

Еще выяснил что в lib_jsr75i не работает skip. Первый раз срабатывает, а последующие нет.
Пример: в файле содержится 12345_JFIF#6789
skip(6);
str:=read_bytes(0,2);
DrawText(str,0,20); // выдает JF
repaint;

skip(2); // должен сместить текущую позицию на 2 то есть #6
str:=read_bytes(0,2);
DrawText(str,0,40); // выдает IF
repaint;

я пробовал разные значение в skip, но срабатывает только один раз. Ставил Reset чтобы установить указатель в начало файла, но тоже не пашет.
(Offline)
 
Ответить с цитированием
Старый 10.03.2010, 13:00   #11
Roman_V
Оператор ЭВМ
 
Регистрация: 24.02.2010
Сообщений: 29
Написано одно полезное сообщение
Ответ: большие тормоза при работе с FlashCard

почитал форум... похоже дело-дрянь. у других тоже проблемы... новое никто н напишет. А на java это сделать можно? похоже придется переходить на java...
(Offline)
 
Ответить с цитированием
Старый 11.03.2010, 11:22   #12
Roman_V
Оператор ЭВМ
 
Регистрация: 24.02.2010
Сообщений: 29
Написано одно полезное сообщение
Ответ: большие тормоза при работе с FlashCard

ODD а как у тебя с java? мне бы простенькую програмку написать чтобы она на флэш диске из файла с заданным именем считывала 10 байт по указанному в меню смещению смещению? хочу проверить насколько выгоднее читать много меелких файлов или бороздить по одному огромному файлу. Я с java пока ноль, но чтобы начать надо знать получится ли моя затея или нет. Смогешь?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 07:48.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com