Использование фреймворка 4.6.1 и в условиях сильного стресса все еще имеет эту проблему. Я не уверен, почему это происходит, хотя я нашел способ решить это совсем по-другому (что усиливает мое чувство, что это действительно ошибка .net).
В моем случае я попытался записать огромные неровные массивы на диск (видео кеширование).
Поскольку зубчатый массив достаточно велик, для хранения большого набора видеокадров приходилось выполнять многократные записи, и, несмотря на то, что они были несжатыми, а каждый кэш-файл получал ровно 1000 кадров, зарегистрированные файлы наличных имели все разные размеры.
У меня была проблема, когда я использовал это
//note, generateLogfileName is just a function to create a filename()
using (FileStream fs = new FileStream(generateLogfileName(), FileMode.OpenOrCreate))
{
using (StreamWriter sw = new StreamWriter(fs)
{
// do your stuff, but it will be unreliable
}
}
Однако, когда я указал тип кодирования, все зарегистрированные файлы получили одинаковый размер, и проблема исчезла.
using (FileStream fs = new FileStream(generateLogfileName(), FileMode.OpenOrCreate))
{
using (StreamWriter sw = new StreamWriter(fs,Encoding.Unicode))
{
// all data written correctly, no data lost.
}
}
Обратите внимание также на ширину файла одинакового типа кодировки!