Я написал небольшой класс, который в основном получает данные из CSV-файла и загружает их в объект POJO. Так как мне нужен частый доступ к этим данным, я написал одноэлементный класс, который проверяет, есть ли данные в объекте, и если да, он просто возвращает данные непосредственно из объекта (без необходимости снова получать их из файла). В противном случае он извлекает данные из файла и сохраняет данные в объекте для будущих запросов.
При тестировании я заметил, что примерно 10000 миллисекунд требуется для доступа к данным 10000 раз (включая первую загрузку данных из файла).
Что меня поразило, так это то, что когда я зацикливался 20 000 раз, это занимало всего 177 миллисекунд (всего на две миллисекунды больше, чем 10000 раз), а 50000 раз - всего около 197 миллисекунд.
Каково объяснение, что намного быстрее сделать 50К против 10К? Почему время не увеличивается пропорционально?
Кроме того, почему доступ к данным непосредственно с объекта гораздо быстрее, чем к диску (с помощью файла, это занимает около 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
}
Почему время не увеличивается пропорционально?