Я написал небольшой класс, который в основном извлекает данные из файла CSV и загружает их в объект POJO. Поскольку мне нужен частый доступ к этим данным, я написал одноэлементный класс, который проверяет, есть ли данные уже в объекте, и если да, он просто возвращает данные непосредственно из объекта (без необходимости снова получать их из файла). В противном случае он извлекает данные из файла и сохраняет данные в объекте для будущих запросов.
При тестировании я заметил, что для доступа к данным 10 000 раз требуется примерно 175 миллисекунд (включая первую загрузку данных из файла).
Что меня поразило, так это то, что когда я зацикливал 20000 раз, это заняло всего 177 миллисекунд (всего две миллисекунды больше, чем 10000 раз), а 50 000 раз заняло всего около 197 миллисекунд.
Какое объяснение тому, что намного быстрее сделать 50K по сравнению с 10K? Почему время не увеличивается пропорционально?
Также почему доступ к данным напрямую из объекта происходит намного быстрее, чем доступ к нему с диска (когда я обращаюсь к нему через файл, это занимает около 160 миллисекунд за один раз)
Спасибо
Обновление:
Возможно, еще больше озадачивает то, что когда я пытаюсь получить доступ к объекту с помощью двух разных ключей (что требует двух операций чтения из файла), это занимает примерно такое же количество времени (с вариацией в 1 миллисекунду), чем однократный доступ к нему. Все объяснения того, что доступ к объектам в 200 тысяч раз быстрее, чем доступ к файлам, объясняет только мое первое наблюдение, но теперь я фактически читаю данные из двух разных файлов, но не вижу пропорционального увеличения количества времени, которое требуется.
Другими словами, делаем это:
for (int counter = 0; counter < 1; counter++) {
POJOObj.getInstance().getKey("Key1", "Val1");
}
занимает столько же времени, как и это:
for (int counter = 0; counter < 1; counter++) {
POJOObj.getInstance().getKey("Key1", "Val1");
POJOObj.getInstance().getKey("Key1", "Val2"); // this requires new read from file
}
Почему время не увеличивается пропорционально?