• XSS.stack #1 – первый литературный журнал от юзеров форума

Запись в конец файла

dyadka0220

(L3) cache
Пользователь
Регистрация
18.06.2020
Сообщения
281
Реакции
166
Я заметил что чем больше файл, тем дольше происходит запись в конец файла.
C++:
SetFilePointerEx(hFile, liMove, 0, FILE_END);
WriteFile(hFile, "chlen", 5, &dwO, 0);
С чем это связанно и как это можно решить? Подскажите :)
 
С чем это связанно и как это можно решить? Подскажите
Скорей-всего WriteFile еще и сбрасывает кеш на носитель.

Честно не копал на низком уровне как он работает, может позже изучу, но по аналогии с линуксом и другими системами, когда вы открываете файл и делаете чтение/запись, реально все это записывается в какой-то кеш, обычно кеширует как файловая система, так и сама операционная система, так-вот, т.к. WriteFile это API, т.е. какая-то прослойка между файловой системой и самой операционной системой, то вероятней всего, по мимо записи что-то в конце файла, вы записываете еще и кеш, т.е. сбрасываете его на носитель, из-за этого и тормоза, в данном случае.)

Варианты решения:

1)Использовать асинхронную запись, например так:http://vsokovikov.narod.ru/New_MSDN_API/Menage_files/fn_writefileex.htm

2)Использовать функции, которые 100% не сбрасывают кеш, а сбрасывать его автоматически, там по моему функции fopen, fwrite и т.д.
 
Скорей-всего WriteFile еще и сбрасывает кеш на носитель.

Честно не копал на низком уровне как он работает, может позже изучу, но по аналогии с линуксом и другими системами, когда вы открываете файл и делаете чтение/запись, реально все это записывается в какой-то кеш, обычно кеширует как файловая система, так и сама операционная система, так-вот, т.к. WriteFile это API, т.е. какая-то прослойка между файловой системой и самой операционной системой, то вероятней всего, по мимо записи что-то в конце файла, вы записываете еще и кеш, т.е. сбрасываете его на носитель, из-за этого и тормоза, в данном случае.)

Варианты решения:

1)Использовать асинхронную запись, например так:http://vsokovikov.narod.ru/New_MSDN_API/Menage_files/fn_writefileex.htm

2)Использовать функции, которые 100% не сбрасывают кеш, а сбрасывать его автоматически, там по моему функции fopen, fwrite и т.д.
Спасибо! Лимит на лайки
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Попробую дополнить
Возможно закончился свободный write cache, особенно если ты дописываешь часто и много
Иногда может помочь открытие файла с флагом FILE_FLAG_RANDOM_ACCESS
А может сделать еще хуже https://support.microsoft.com/en-us...n-accessing-large-files-with-file-flag-random
Попробуй поэксперементировать
Если дело в кеше, то поможет асинк, как уже сказал X-Shar, но поможет только треду бежать дальше, а не записать изменения быстрее
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх