Обновлять

Обновлять

У меня есть тестовый код, который генерирует список из 5000 небольших блоков данных (минимальный размер: 351 байт, максимальный размер: 386 байт, средний размер: 385 байт), а затем записывает их как отдельные файлы в каталог — среднее время записи составляет около 5 мс на файл.

Если я использую тот же самый код, но вместо записи 5000 различных блоков повторяю одни и те же данные снова и снова (например, записываю 500 раз первые 10 блоков), среднее время записи становится менее 2 мс на файл — как будто файловая система каким-то образом способна оптимизировать запись, поскольку данные одни и те же.

Есть ли у кого-нибудь объяснение такому поведению?

Тестирование на Surface Pro 4 - процессор i5 с 8 ГБ ОЗУ, запись на встроенный твердотельный накопитель. Операционная система - Windows 10.

Тестовый код:

const int count = 5_000;

// Generate a list of count small byte arrays: min. size: 351, max size: 386, average size: 385
var bytes = SerializeObjects( count );
// Write them all to disk as individual files
var watch = Stopwatch.StartNew();
for ( var i = 0; i < count; i++ )
{
    File.WriteAllBytes(
        Path.Combine( _directory, Guid.NewGuid() + ".xml" ),
        bytes[ i ]
    );
}
watch.Stop();
// Timed at: around 5ms per file
Console.WriteLine( "Wrote {0:n0} files in {1:n0} ms ({2:n3} ms per file)", count, watch.ElapsedMilliseconds, (double)watch.ElapsedMilliseconds / count );

изменив WriteAllBytes()вызов записи bytes[ i % 10 ](повторяя первые 10 значений снова и снова), время на файл сокращается до менее 2 мс

Обновлять

Это не дедупликация:

PS > Get-DedupProperties C
Get-DedupProperties : Deduplication feature is not available

решение1

Версии Windows, начиная с Server 2012, поддерживают «дедупликацию» данных. Возможно, это включено в вашей системе, и если это так, то ОС обнаруживает дублирующие записи и выделяет «указатели» на общие данные файловой системы. Эффект этого будет заключаться в том, что NT будет обновлять только блоки каталогов и не будет выделять и записывать новые блоки файловой системы для дублирующихся файлов, что значительно сократит ввод-вывод.

Связанный контент