Моя программа считывает x байтов из файла, проверяет, все ли они нули, повторяет процесс для 20 000 файлов и сохраняет список файлов с ненулевыми байтами. Пытаясь контролировать производительность, я сделал количество байтов, которые он проверяет для каждого определяемого файла (byteSize).BinaryReader 30x быстрее после первого запуска. Байт-массив все еще в памяти?
Проблема в том, что для первого запуска программы требуется ~ 5 минут для завершения (byteSize = 8192), но если я запустил его снова, это займет всего 10 секунд, даже если я закрою и перезапустите программу, поэтому единственной причиной, которая приходит мне на ум, является то, что массив байтов остается в памяти.
BinaryReader находится под директивой «using», насколько я знаю, он должен закрыть поток после завершения цикла. Итак, почему массив байтов остается? Как его удалить? Мне нужно сделать это, чтобы измерить фактическую производительность каждый раз, когда я запускаю прог.
byte[] readByte = new byte[byteSize];
for (int i = 0; i < readCycles; i++)
{
using (BinaryReader reader = new BinaryReader(new FileStream(file, FileMode.Open, FileAccess.Read)))
{
reader.BaseStream.Seek(8192 + i * byteSize, SeekOrigin.Begin);
reader.Read(readByte, 0, byteSize);
}
foreach (byte b in readByte)
{
if (b != 0)
{
allZeros = false;
break;
}
else
allZeros = true;
}
if (allZeros == false) break;
}
Байт-массив не может быть восстановлен таким образом вашим приложением после перезапуска процесса. Возможно, то, что вы испытываете, - это кэширование файлов операционной системы. – itsme86
* array * не сохраняется в памяти (это не перезапускает процесс перезагрузки), но содержимое * файла *. Для таких вещей у Windows есть свой кэш файловой системы. Создание новых файлов для каждого запуска должно решить это. –