Производительность чтения файлов на смартфонах: внутреннее хранилище против SD-карты и жесткий диск ПК - программирование
Подтвердить что ты не робот

Производительность чтения файлов на смартфонах: внутреннее хранилище против SD-карты и жесткий диск ПК

В моем приложении Android будут использоваться большие и очень большие файлы (т.е. от 10 МБ до 2 ГБ).

Мне всегда было интересно, какое оборудование используется смартфонами для стабильного хранения, а также то, что софт (чтение/поиск файлов) здесь одинаковый, как для жестких дисков ПК. Я попытался найти информацию об аппаратных средствах и получить некоторую картину об этом (внутреннее хранилище, SD-карта), но ни один из источников, которые я проверил, не является исчерпывающим и/или достаточно конкретным. Мои (взаимосвязанные) вопросы:

  • В чем основные отличия, которые я должен учитывать при чтении больших файлов на "современном" смартфоне (например, на телефоне Android 2.2), по сравнению с тем же, что и приложение Java для ПК? (с точки зрения производительности чтения/чтения дисков, очевидно, операционная память для мобильных телефонов меньше, чем на ПК, поэтому это необходимо учитывать в случае буферов и т.д.).
  • Каковы (существенные) основные различия между стабильным оборудованием для хранения, используемым в смартфонах, по сравнению с жесткими дисками ПК? (Я знаю, что это очень широкий вопрос, поэтому я даже ценю очень короткий ответ здесь и, возможно, несколько надежных внешних URL-адресов).
  • В терминах InputStream чтения и поиска (skipBytes) существует разница (например, на Android) между использованием внутреннего хранилища и SD-картой (я намеренно не писал "внешнее хранилище", потому что это не обязательно SD-карта на каждом устройстве)? Карта SD медленнее?
  • Например, я хотел бы прочитать 2 МБ данных из файла 2 ГБ, и эти данные 2 МБ распределены во многих разных/отдаленных частях файла. Все смещения известны, поэтому я создаю восходящий порядок смещений, а затем использую BufferedInputStream.read() (например, в DataInputStream) для их чтения (и используя skipBytes() для поиска там, где это необходимо). Поэтому в базовой файловой системе это может потребовать "прохождения" всего 2 ГБ файла. (Например, Android использует функции linux для поиска в файле, когда это необходимо.) Тем не менее, он ищет такой же эффективный, как на жестком диске ПК? Что относительно SD-карты и внутренней памяти с точки зрения эффективности поиска?
  • Каковы типичные скорости чтения данных? (внутреннее хранилище смартфонов против SD-карты и ПК без жесткого диска SSD)

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

ВАЖНО: когда я спрашиваю, что "... ищет такой же эффективный, как на жестком диске ПК?", я не только (подразумеваю) означает абсолютные значения, но и механизм. То есть, если он работает на основе одних и тех же логических принципов (= если возможно, пропускать большие части) или есть некоторые недостатки (например, такие попытки "проскакивания" невозможны на SD-карте, и, таким образом, пропуск намного больше - - т.е. непропорционально - бесполезно на аппаратном обеспечении смартфона, чем на жестком диске ПК).

4b9b3361

Ответ 1

Попытка ответить на ваши вопросы

  • Есть только одно отличие: если ваши файлы находятся в пакете приложений (в приложении), потому что вам нужно открыть его с помощью другого метода, однако, если он находится внутри пакета приложения и в пакет/файл/, чем вы можете использовать тот же файл файла bla...

  • Внутренняя память для смартфонов быстрее, чем HDD, но если вы храните ее во внешней SD-карте, это изменится из-за того, что SDCards имеют максимальную скорость для чтения и записи.

  • Да, есть различия... при чтении с внутренней или SDCard (а не на внешнюю SD-карту), в противном случае у нас не должно быть устройств с 1 или 2 ГБ и 16 ГБ для хранения. Все, что в этой основной памяти будет работать быстрее.

  • Поиск всегда является медленной задачей, вы можете получить всю дату, когда вам нужно закрыть поток, даже если вы не достигли конца файла. То, что вы можете сделать, чтобы ускориться, - это перезагрузить кеш каждый раз, когда ваше приложение прочитало некоторое количество КБ или МБ..., чем вы можете обедать asyncTask, чтобы загрузить его, и как только основной поток завершится, он будет искать больше данных если существует. Это должно ускориться, потому что вы будете искать только в памяти.

  • Вам понадобится приложение для этого или напишите свое, это не должно быть слишком сложно, вы можете использовать обработчик и загружать столько, сколько можете, в массив или список, а также подсчитывать байты и повторите его по другим типам памяти (внутренняя SD-карта и внешняя SDCard).

Ответ 2

Ваш вопрос слишком специфичен и требует слишком много данных:-) Я думаю, что будет сложно найти другого человека с вами очень специфические требования.

В общем, скорость доступа к данным на карте SD зависит не только от аппаратного обеспечения драйвера (устройства), но и от самой карты и доступа к программному обеспечению (версия для Android).

С другой стороны, вы можете найти некоторую информацию о скорости SD-карт в:

Даже в Google Play вы можете найти некоторые приложения для проверки скорости SD-карты на вашем устройстве (поиск для SD-карты, SD Tools и т.д.)