Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Dima TНо если ты выделил память (ей сопоставился своп) прочитал из файла кусок в эту память, и кусок не влез, то он сначала частично уйдет в своп, затем когда ты пишешь в файл идет сначала чтение из свопа в память (чего нет в памяти). Ну и зачем тут своп если вместо него сразу можно использовать исходный файл? Давай порассуждаем. Когда занимаются оптимизацией I/O (это я как бывш) ораклоид говорю - то ведут учёт количеста ввода вывода. Между random access (seqiental) и serial (scattered) вводят метрики полезности или штрафные коэфициенты. Например 1 последовательный скан объёмом 128 Mb даёт больше пользы для перформанса чем 256 чтений по 512 килобайт. Закрывая глаза на метрики. Можем просто учесть количество изменений в байтах. В нашей конкретной задаче нам нужно либо. 1) Либо обновить содержимое символьного файла с адресов AXXXX-AYYYY и BXXXX-BYYYY на нужные char[]. в том случае когда строки одинаковы по размеру. 2) Обновить объединение этих строк со сдвигом серединки. СXXXX-CYYYY если длины строк разные. Эти обе операции решаются блочной записью. И я не знаю зачем и для чегео нам нужно привлекать механизм отображения оперативной памяти на диск или уж тем более на своп. Возможно я не прав. Но в таком случае нас рассудит либо Windows perfmon либо Linux IO stat. То software которое даст меньший объём физического чтения+записи будет более эффективным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 15:13 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
petravМожет легче кластеры на файловой системе переставить? Насколько я понимаю файл — это список кластеров на носителе данных. Вот этот список и нужно подредактировать не перемещая сами данные. Это если сдвиг на число байт кратное размеру кластера. В остальных случаях все равно читать-писать. И не просто это, если вообще возможно, сомневаюсь что ОС пустит к кластерам из обычного приложения. Не знаю эту тему, ни разу не пробовал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 15:17 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
ИзопропилMasterZivНо это надо в памяти кусок YYY держать, что может быть накладно. не надо - подвигать можно и не сохраняя в памяти ничего, одного буфера достаточно Это как ? Каждый раз я должен записать из памяти кусок по младшим адресам в файле, старшие при этом могут быть затёрты, или перед ними будет сделана дырка. Значит, старый блок надо считать перед этим в память, чтобы потом записать его дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 15:19 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Dima TИзопропилпропущено... ага, mmap вместо последовательного доступа - охрененно эффективно. Я про виндовый мап писал. CreateFileMapping(). В виндовсе эффективно. Возможно в линуксах по-другому устроено, не пользовался. Оно тебе не даст ровно ничего в смысле упрощения задачи или уменьшения кол-ва IO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 15:21 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Dima TpetravМожет легче кластеры на файловой системе переставить? Насколько я понимаю файл — это список кластеров на носителе данных. Вот этот список и нужно подредактировать не перемещая сами данные. Это если сдвиг на число байт кратное размеру кластера. В остальных случаях все равно читать-писать. Так в том то и дело, что нам придётся перезаписывать всего несколько граничных кластеров на файловой системе. По сути задача сводится к перезаписи нескольких десятков килобайт. А вся задача целиком — к последовательному чтению всего файла (в худшем случае). Время на поиск строк можно игнорировать. Узкое место тут — это чтение файла. Dima TИ не просто это, если вообще возможно, сомневаюсь что ОС пустит к кластерам из обычного приложения. Не знаю эту тему, ни разу не пробовал. Само собой. А как работают сторонние программы дефрагментации? Вот-вот. В крайнем случае напишем свой драйвер файловой системы. И мы в шоколаде, получаем премию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 15:29 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
maytonЭти обе операции решаются блочной записью. И я не знаю зачем и для чегео нам нужно привлекать механизм отображения оперативной памяти на диск или уж тем более на своп. Отображения оперативной памяти на своп это принцип работы виндовса, поэтому он происходит по умолчанию. Но при желании ты можешь изменить это умолчание. Как только ты выделяешь память malloc()/new ОС ассоциирует ее со свопом, на случай если эту память надо будет освободить. Другой вопрос будет ли сброс на диск этой памяти. Если памяти много - не будет. MasterZivОно тебе не даст ровно ничего в смысле упрощения задачи или уменьшения кол-ва IO. IO будет одинаково при достаточном объеме памяти и меньше с мапом если вариант без мапа задействует своп. Выше писал. Если реальной памяти не хватит то будет дополнительный IO на своп блока в памяти (в который ты закэшируешь то что обратно писать). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 15:36 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
petravDima Tпропущено... Это если сдвиг на число байт кратное размеру кластера. В остальных случаях все равно читать-писать. Так в том то и дело, что нам придётся перезаписывать всего несколько граничных кластеров на файловой системе. По сути задача сводится к перезаписи нескольких десятков килобайт. А вся задача целиком — к последовательному чтению всего файла (в худшем случае). Время на поиск строк можно игнорировать. Узкое место тут — это чтение файла. Давай на примере: сектор 3 байта. Это данные Код: plaintext 1. Покажи как кластеры передвинуть не переписывая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 15:47 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
[quot mayton]Dima TКогда занимаются оптимизацией I/O (это я как бывш) ораклоид говорю - то ведут учёт количеста ввода вывода. I/O в СУБД это другое, оракл не изучал, в основном MSSQL, но суть таже. Там оптимизация за счет индексов, статистик и т.п., т.е. за счет организации и использования метаданных. Там оптимизация сводится к тому чтобы прочитать минимум метаданных и получить данные или указатель на место где данные. Тут мы говорим про более низкий уровень. У нас нет метаданных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 16:06 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Dima TmaytonЭти обе операции решаются блочной записью. И я не знаю зачем и для чегео нам нужно привлекать механизм отображения оперативной памяти на диск или уж тем более на своп. Отображения оперативной памяти на своп это принцип работы виндовса, поэтому он происходит по умолчанию. Но при желании ты можешь изменить это умолчание. Ты знаешь. Мне кажется я уже вижу следующий пятничный бенчмарк №2. OMG! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 16:09 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Некоторые люди думают, что MMF это такая магия, позволяющая работать прямо с диском, а не тонкая обёртка над теми же ReadFile/WriteFile. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 16:14 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
maytonТы знаешь. Мне кажется я уже вижу следующий пятничный бенчмарк №2. OMG! Я был уверен что этим кончится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 16:21 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Dima TЕсли реальной памяти не хватит то будет дополнительный IO на своп блока в памяти (в который ты закэшируешь то что обратно писать). ты серьёзно собрался весь файл в память прочитать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 16:36 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Dima TmaytonТы знаешь. Мне кажется я уже вижу следующий пятничный бенчмарк №2. OMG! Я был уверен что этим кончится Тебе страшно? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 16:40 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Dima Tpetravпропущено... Так в том то и дело, что нам придётся перезаписывать всего несколько граничных кластеров на файловой системе. По сути задача сводится к перезаписи нескольких десятков килобайт. А вся задача целиком — к последовательному чтению всего файла (в худшем случае). Время на поиск строк можно игнорировать. Узкое место тут — это чтение файла. Давай на примере: сектор 3 байта. Это данные Код: plaintext 1. Покажи как кластеры передвинуть не переписывая. Ты знаешь, у меня не получилось сходу выполнить твою задачу. Я переставляю эти буквы, путаюсь в них и начинаю жутко нервничать. Будем считать, что ты поставил меня в тупик. Но мне кажется очевидным, что я прав. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 16:42 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Изопропилты серьёзно собрался весь файл в память прочитать? Тут 18155678 то что я собрался читать. Тут 18159433 MasterZiv с картинками тоже самое расписал. Если это к тому что я про мап писал, то CreateFileMapping() всего файла не приводит к чтению всего файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 16:44 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
petravТы знаешь, у меня не получилось сходу выполнить твою задачу. И не получится. Упрощаю картинку чтоб тебе ничего не двигать. Надо из этого Код: plaintext 1. Код: plaintext 1. Данные сместились внутри каждого сектора . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 16:49 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Dima TpetravТы знаешь, у меня не получилось сходу выполнить твою задачу. И не получится. Упрощаю картинку чтоб тебе ничего не двигать. Надо из этого Код: plaintext 1. Код: plaintext 1. Данные сместились внутри каждого сектора . Ты меня не понял. Смысл в том, что нужно поменять список кластеров. Как-то так: Код: plaintext И подредактировать содержимое трёх кластеров, не трогая остальные кластеры. В общем случае мы должны отредактировать список кластеров (минимально). И редактировать содержимое максимум четырёх кластеров. Но я прощу прощения, что пока не смог формализовать свою мысль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 16:59 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
Остался пустяк. Найти API которое нам лихо будет играть в пасьянс кластерами. И это вам не чортов FAT16/32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 17:11 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
MasterZivЭто как ? примерно так ( если в другую сторону нужно - тогда двигаться назад) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 17:23 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
И вообще. Отностительно storage не было никаких заявок. На чём файл приедет? На флешке? На мобиле с microSD? На гугл-драйве? На (OMG!) DVD диске? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 17:23 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
petravИ подредактировать содержимое трёх кластеров, не трогая остальные кластеры. как это не трогать? у тебя что, кластеры в один байт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 17:24 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
maytonИ вообще. Отностительно storage не было никаких заявок. На чём файл приедет? На флешке? На мобиле с microSD? На гугл-драйве? На (OMG!) DVD диске? ну да, если доступен по PTP/MTP - остаётся только целиком переписывать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 17:27 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
ИзопропилpetravИ подредактировать содержимое трёх кластеров, не трогая остальные кластеры. как это не трогать? у тебя что, кластеры в один байт? Нет. У нас в файле два региона. У каждого региона по две границы (память линейная). Эти две границы произвольным образом находятся в максимум двух кластерах. Итого у нас максимум четыре кластера которые нужно изменять. Всё остальное мы «переставляем» меняя список (массив?) кластеров, который по сути является списком физических адресов кластеров на носителе. Кроме четырёх кластеров и списка мы ничего не перемещаем. А это всего несколько десятков килобайт на изменение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 17:34 |
|
||
|
замена 2 произвольных строк в огромном файле
|
|||
|---|---|---|---|
|
#18+
ИзопропилmaytonИ вообще. Отностительно storage не было никаких заявок. На чём файл приедет? На флешке? На мобиле с microSD? На гугл-драйве? На (OMG!) DVD диске? ну да, если доступен по PTP/MTP - остаётся только целиком переписывать Да при такой постановке всё шаманство безсмысленно. Один хер надо файл вычитать и записать. Тоесть вернуться к самой первой и правильной мысли. Пока не пусто прочитать из файла в цикле очерденую строку. Сделать нужные замены в строке. Сохранить строку. ИЧСХ никто не придёрется к концепции. Кесарю - кесарево.. Текстовику - текстовый API ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 17:40 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39054241&tid=2018833]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
63ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 166ms |

| 0 / 0 |
