Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
maytonDima T, покажи что fsutil покажет по статусу test.tst Не понял что надо. Почитал хэлп все равно не понял чего за софтина такая. Давай конкретно как ее надо запустить. В целом какая-то нездоровая прога, права админа требует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2015, 19:17 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Запусти cmd от Администратора. И сделай нечто вроде. Код: plaintext 1. 2. 3. 4. 5. Вот фильм указан как обычный файл. Не разрежённый. Раньше у меня стоял m-Torrent он до закачки взводил атрибут sparse. А этот дурацкий Vuze - не умеет или я ево не настроил фиг поймёшь ну вобщем как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2015, 19:26 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Вот что пишет Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2015, 19:30 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Dima TВот что пишет Код: plaintext 1. 2. Начни в него что-то писать. Точечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2015, 19:33 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
maytonНачни в него что-то писать. Точечно. Чуть поправил код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. Смотрю фарой. Куча ноликов и две 1 там где написал в коде. Код: plaintext 1. 2. Можешь сам затестить. Код дал. На самом деле тема интересная. Выделить кусок места на диске без инициализации. Есть же malloc() для памяти, а для диска нет аналога. но я не могу тут понять что значит "Разреженный", у меня только ассоциация с экселем и пр. таблицами, но зачем это на уровне файлов? Взять те же торенты, размер известен, надо заранее знать что в итоге все войдет на диск, чтобы в послений момент не словить ошибку что место кончилось. В моем примере тоже самое, место на диске занимается реально. Добавил FlushViewOfFile() все равно 0 мс, тут точно как-то хитро контроллер HDD задействуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2015, 20:05 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Dima Tно я не могу тут понять что значит "Разреженный"Разреженный (sparse) - файл, который не занимает места на диске. Система создаёт запись в каталоге, но не выделяет такому файлу дисковых кластеров, а просто помечает весь файл или отдельные его диапазоны как "пустоты". Есть и второй вариант - создаём файл, позиционируем, пишем "ноль байт" и закрываем. Дальше возможны варианты: 1. Система честно расписывает дисковое пространство нулями - надёжно, но медленно; 2. Система помечает кластер как "все нули", но откладывает запись до момента, пока в файл не будет записан хотя бы байт. Будет ли выполняться запись во все кластеры файла или только в те, в которые попали записываемые данные - не знаю. При любом из двух вариантов mmap получит набор обнулённых страниц, что будет сделано диспетчером виртуальной памяти без чтения кластеров диска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2015, 20:16 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovDima Tно я не могу тут понять что значит "Разреженный"Разреженный (sparse) - файл, который не занимает места на диске. Система создаёт запись в каталоге, но не выделяет такому файлу дисковых кластеров, а просто помечает весь файл или отдельные его диапазоны как "пустоты". Спасибо. Значит я правильно понимаю этот термин. Но зачем это надо? Кто-нибудь модет предложить реальное применение этой фиче? Разве что эксель перенести на файловый уровень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2015, 20:25 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Dima TКто-нибудь модет предложить реальное применение этой фиче?1. Разреженные матрицы; 2. Экономить место на диске и ускорять ввод-вывод ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2015, 20:27 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov1. Разреженные матрицы; Это то что я писал "эксель на файловом уровне". Basil A. Sidorov2. Экономить место на диске и ускорять ввод-вывод А это хрень полная. Откуда те файлы с кучей нулей? Это же нездоровые грабли, не вписывающиеся в общепринятую логику. Допустим мне надо место на диске, но занять пока нечем, я записал кучу нулей но реально место на диске не получил и в один прекрасный момент получу ошибку записи в середину файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2015, 20:38 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Dima TОткуда те файлы с кучей нулей например, реализация хэш-таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2015, 20:51 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
ИзопропилDima TОткуда те файлы с кучей нулей например, реализация хэш-таблицы На файловом уровне? Это типа разрешаем чесать правое ухо левой ногой и говорим что это норма? К хэш таблицам у меня отдельное непонимание. Особенно по поводу О(1). ЗЫ mayton, это пятничная тема для тестов, только ТЗ придумать надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2015, 21:03 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Dima TНа самом деле тема интересная. Выделить кусок места на диске без инициализации. Есть же malloc() для памяти, а для диска нет аналога. но я не могу тут понять что значит "Разреженный", у меня только ассоциация с экселем и пр. таблицами, но зачем это на уровне файлов? Взять те же торенты, размер известен, надо заранее знать что в итоге все войдет на диск, чтобы в послений момент не словить ошибку что место кончилось. В моем примере тоже самое, место на диске занимается реально. Добавил FlushViewOfFile() все равно 0 мс, тут точно как-то хитро контроллер HDD задействуется. Идея - старая как говно Торвальдса. Создаём новый файл в режиме write | binary. Не через fopen. А через нормальнй API который с хендлами работает. Через open (в линуксе). Изначально он имеет нулевой размер. Курсор стоит в нулевой позиции. Дёргаем lseek(handle,2*1024*1024*1024); Получаем два гигабайта нулей. Далее эффект будет зависет от реализации драйвера файловой системы. Тоесть я на 100% не знаю какой будет эффект. Но современные Linux filesystems не аллоцируют место на диске. А просто помечают что создана цепочка sparse-блоков. Эффект при чтении будет такой как будто читаем нули. При доступе на запись блоки начнут реально аллоцироваться ФС. (Здесь я могу ошибаться т.к. точно не знаю имеют ли место блоки либо биткарта блоков либо еще бох знает что так что пускай Пингвино-филы меня поправят. Не обижусь) Где-то читал что есть протокол-договорённость для Ораклов и прочих DBMS что аллокация табличных пространств идёт именно по такому методу. Во многих стандартах и спецификациях файловых форматов нули имеют особое значение. Вроде как оптимизация пространства что-ли. m-Torrent использовал эту фичу. В старых версиях под WindowsXP я специально конфигурил проперти чтоб торрент так работал. У меня на диске D: было порядка 200 Гб места для качания музла и фильмов но логиеский размер был поядка 500 Гб. Profit ! Главное было - вовремя скачанное кино нарезать на DVD. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2015, 22:33 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovDima TКто-нибудь модет предложить реальное применение этой фиче?1. Разреженные матрицы; 2. Экономить место на диске и ускорять ввод-вывод Любой random-access доступ на запись к больному файлу который изначально пуст. Пример с торрентами и с Ораклами я уже приводил. Добавить больше нечего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2015, 22:36 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Как в Windows - ХЗ. Наверное также. Только надо файл создать со специальным флажком sparse. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2015, 22:39 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Вот толко нагуглил. Не проверял. https://msdn.microsoft.com/en-us/library/windows/desktop/aa364596(v=vs.85).aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2015, 22:42 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Dima TВыделить кусок места на диске без инициализации. Есть же malloc() для памяти, а для диска нет аналога. malloc - плохая аналогия, лучше mmap с флагом MAP_NORESERVE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2015, 23:17 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Dima TА это хрень полная. Откуда те файлы с кучей нулей?Например - неадекватные тесты.Допустим мне надо место на диске, но занять пока нечем, я записал кучу нулей но реально место на диске не получил и в один прекрасный момент получу ошибку записи в середину файла.Это если у вас есть "завышенные привилегии" и желание возиться с API разреженных диапазонов. Если по рабоче-крестьянски спозиционировать указатель и записать ноль байт - получится и быстро и резервированием места на диске. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2015, 06:46 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Сорри за задержку ответа. Dima TpetravБыла задача чтения текстового файла на несколько гигабайт. Просто таблица с данными — потом данные отправлялись на обработку. Читался этот файл с помощью обычного fscanf(). Автору программы показалось, что его приложение тормозит именно из-за операций чтения из файла. :) В общем, я разобрался с меппингом файлов и программу перевели на sscanf(). Я не верил в какое-то ускорение, а даже предполагал замедление программы. Случилось ужасное. Производительность приложения на маппинге упала в сотни раз (или даже в тысячи, точно не помню).... мап тут вообще ни при чем, у тебя главный тормоз scanf`ы. Надо было писать свой парсер строки заточенный под твою строку. В идеале разбор строки в один проход. Дальше без разницы: читать кусок файла в буфер, парсить, читать следующий кусок и т.д. или сделать мап и обработать как один большой кусок. Вариант с мап просто удобнее, т.к. код меньше и проще. В случае с буфером надо попутно решать проблемы контроля вся ли строка в буфере, докачка в буфер с учетом этого и т.п. В принципе несложно, но с мап этого вообще не надо. Дальше от непонимания сути рождаются домыслы из серии "мап - магическая штука :)" LOL, Dima T , спасибо за разъяснения очевидных вещей. Конечно, дело в sscanf. Это был пример совершенно неожиданных проблем с маппингом при применении обычных приёмов программирования. А жизнь так складывается (у меня), что он не очень то и нужен. Если бы маппинг так просто и давал ускорение почти везде, то все только им бы и пользовались. Dima TpetravНу хорошо. Предположим, что в данном алгоритме при меппинге ОС так разрулила контроллером диска, что данные никогда не проходили через интерфейсную шину диска, данные никогда не были в оперативной памяти и контроллер сам внутри винчестера всё скопировал. И в этом и результат такой впечатляющий. Мне почему-то кажется, что используя меппинг мы отказываемся от кеширующего механизма ОС. Что в 99.9% случаев приведёт к кардинальному замедлению программ. И при меппинге нужно подключать специалиста и чётко обосновывать зачем и как мы это делаем. И самим реализовывать кеширование. Возможно я не прав. ХЗ что ответить на этот поток сознания :) Напишу как я понимаю работу виндовса с файлами: при любом доступе к файлу (копирование, чтение, мап) данные из файла попадают в кэш ОС, а дальше при повторном чтении (неважно fread() или мап) берутся уже из кэша. При записи сначала пишется в кеш, затем из кэша на диск (в файл). Теперь рассмотрим детально что происходит на примере изменения 1 байта в файле: 1. Мап. Замапили файл, обращаемся в этому байту, происходит чтение 4 кб (страницы памяти) в кэш, т.е. получаем страницу физической памяти ассоциированную с куском файла, дальше эта физическая страница подставляется в адресное пространство моего процесса, т.е. фактически я меняю сразу в кэше ОС. Дальше менеджер памяти скидывает из кэша на диск. 2. fread(1 байт) происходит чтение 4 кб (страницы памяти) в кэш (как в п.1), оттуда байт копируется в память моего процесса, затем там его меняю, fwrite(1 байт) - ОС копирует из моей памяти в ту самую страницу кэша. Дальше как в п.1 Никакой мистики и магии. Мап быстрее за счет того что нет этих лишних копирований в памяти. Работа напрямую с кэшем ОС. И плюс накладные расходы на вызов fread()/fseek()/fwrite() в цикле. А ничего, что копирование в памяти занимает пренебрежимо малое время по сравнению с файловым вводом/выводом? И это малое время дало маппингу ускорение в разы? И читаешь ты не по одному байту, а в основном 1*bufSize байт, блин. PS: Попробуй плиз свою программу с меппингом запустить с флешки. Или с сетевого диска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2015, 21:03 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39055729&tid=2018833]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 273ms |
| total: | 427ms |

| 0 / 0 |
