а у вас там какие-то lock-и , которые только томозят всю процедуру , можно в памяти собирать данные до нужного кол-ва байт и потом один раз писать их.
а если у тебя несколько потоков создают аналогичные файлы? Первый поток проверит, есть ли там еще память, получит положительный ответ. Второй поток запишет туда еще данные, потом первый поток запишет. Норм, да )