Я работаю над тестовым приложением на платформе 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?