Как прочитать файл без кеша в Android? - PullRequest
1 голос
/ 16 ноября 2010

Я работаю над тестовым приложением на платформе Android. Проверьте скорость записи / чтения на SD-карту. Я пишу на языке C с интерфейсом NDK.

Сначала я пишу цикл for для создания 256 файлов с 512 случайными байтами в каждом. Эта часть отлично работает. Я открываю файл с флагом O_CREAT | O_WRONLY | O_SYNC и режимом 0666. После записи вызова я выполняю sync (), чтобы убедиться, что данные записаны на карту.

Затем я пишу еще один двухуровневый цикл for, чтобы прочитать эти файлы для проверки скорости. Я использую O_RDWR | O_SYNC, чтобы открыть файл. Затем вызовите read ().

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

Я пытался прочитать флаг O_DIRECT. Но это ошибка с EINVAL. На странице man для open говорится, что, возможно, это из-за того, что эта функция не реализована платформой.

Есть ли у вас какие-либо идеи о том, как читать без кэша в Android?

1 Ответ

0 голосов
/ 16 ноября 2010

Для отключения кэширования на уровне операционной системы может потребоваться рутированный телефон.

http://wiki.cyanogenmod.com/index.php?title=SDCardSpeedTests

Это также обеспечивает выполнение операций, достаточно больших, чтобы разбить любые буферы на карте.

...