Вопрос

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

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

Затем я пишу еще 2-уровневой для петли, чтобы прочитать этот файл для тестирования скорости. Я использую o_rdwr | o_sync, чтобы открыть файл. Затем вызовите read ().

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

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

Вы хоть представляете, как читать без Cache в Android?

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top