From 03674a450f9df3c81127f3d30ecb762dcff2755b Mon Sep 17 00:00:00 2001 From: Ted John Date: Thu, 7 Jul 2016 19:17:09 +0100 Subject: [PATCH] improve performance of objects.idx loading --- src/object/ObjectRepository.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/object/ObjectRepository.cpp b/src/object/ObjectRepository.cpp index cc2e742d46..958121f7f9 100644 --- a/src/object/ObjectRepository.cpp +++ b/src/object/ObjectRepository.cpp @@ -25,6 +25,7 @@ #include "../core/Guard.hpp" #include "../core/IStream.hpp" #include "../core/Memory.hpp" +#include "../core/MemoryStream.h" #include "../core/Path.hpp" #include "../core/Stopwatch.hpp" #include "../core/String.hpp" @@ -321,9 +322,16 @@ private: header.PathChecksum == _queryDirectoryResult.PathChecksum) { // Header matches, so the index is not out of date + + // Buffer the rest of file into memory to speed up item reading + size_t dataSize = (size_t)(fs.GetLength() - fs.GetPosition()); + void * data = fs.ReadArray(dataSize); + auto ms = MemoryStream(data, dataSize, MEMORY_ACCESS_READ | MEMORY_ACCESS_OWNER); + + // Read items for (uint32 i = 0; i < header.NumItems; i++) { - ObjectRepositoryItem item = ReadItem(&fs); + ObjectRepositoryItem item = ReadItem(&ms); AddItem(&item); } return true;