|
|
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
Ежов Дмитрий Сергеевич Мне надо, чтобы файлик записался, даже несмотря на то, что процесс умер. MMF для этого не предназначен, и не сможет такого гарантировать. Гарантия записи при смерти юзер процесса появляется после закрытия системного хэндла (HFILE). Если нужно гарантировать - закрывайте файл (все хэндлы) и открывайте заново. По-другому мне неизвестно. MMF был первоначально сделан для внутренних нужд Винды, и оптимизации там касаются в основном чтения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2020, 20:16 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
Vizit0r насколько я помню из результатов изначального сравнения - MMF дает большой прирост к скорости непоследовательного чтения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2020, 21:11 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
Ежов Дмитрий Сергеевич мммм, неумирающий серверный процесс в сложных системах, без утечек памяти и кривых сторонних компонентов и кривого легаси от девопса. Что может быть естественней... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2020, 21:12 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Vizit0r насколько я помню из результатов изначального сравнения - MMF дает большой прирост к скорости непоследовательного чтения по паре кб, но в разных местах файла, и часто-частно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2020, 22:24 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
Vizit0r, а файл, меньше двух гигов, и не sparse? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2020, 22:45 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
Vizit0r _Vasilisk_ Зависит от того, какими блоками читать. Если по одному байту, то дает, а если по 4096 байт, то выигрыша вообще нет. Т.е. сама операция чтения проходит быстрее, но для MMF тратится куча времени на вызов MapViewOfFile по паре кб, но в разных местах файла, и часто-частно. В этом случае ММФ должен рулить, особенно если working set небольшой. Работа с памятью намного привычнее и удобнее чем seek/read, и ММФ не требует загрузки всего файла в память. Без ММФ, если вы выделите массив, и прочитаете туда весь файл чтоб получить удобства памяти, этот массив все равно будет участвовать в ММФ без вашего ведома, только не с первоначальным файлом, а с pagefile. И тогда может оказаться медленнее, т.к. выгрузка в pagefile требует запись на диск, а read-only MMF просто выкидывает старые страницы и читает их заново из оригинала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2020, 22:54 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
НеофитSQL ММФ не требует загрузки всего файла в память. Вызовите MapViewOfFile для 100 мегабайт и посмотрите не время візова и на потребляемую память ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2020, 10:48 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, MMF поднимает в память только те данные, к которым происходит обращение. Кроме того, поднятые в память страницы в любой момент могут быть отданы системе, если будет такая необходимость. Если ты последовательно прошелся по всему файлу, то, в зависимости от условий выполнения, в рабочем наборе приложения может быть полный набор страниц файла, но это не то же самое, что выделить буффер и засосать в него весь файл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2020, 11:39 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey MMF поднимает в память только те данные, к которым происходит обращение Я когда-то проводил опыты по чтению файла разными кусками и разными способами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2020, 12:39 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Рихтера перечитай. з.ы. Показания диспетчера нужно ещё правильно интерпретировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2020, 12:49 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
НеофитSQL Vizit0r, а файл, меньше двух гигов, и не sparse? файлы в районе 100-150 мб, а sparce - это имееется в виду фрагментированность? Если да, то специальной дефрагментацией никто не заморачивается, ни я, ни тем более пользователи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2020, 12:50 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
Vizit0r НеофитSQL Vizit0r, а файл, меньше двух гигов, и не sparse? файлы в районе 100-150 мб, а sparce - это имееется в виду фрагментированность? Если да, то специальной дефрагментацией никто не заморачивается, ни я, ни тем более пользователи. Sparse file - это файлы с дырками, для которых не отведено место на диске. Например, в первом килобайте есть данные, в 100500 килобайте есть данные, а между ними нет ничего, и места на диске не занимает. Дырка при чтении даст нули, а при записи начнет аллокировать кластеры диска, или какие там у конкретной системы единицы аллокации. Если у вас таких файлов нет, то это не ваш головняк. Фрагментация диска на работу ММФ не влияет, 200МБ позволяет легко работать хоть из 32-бит, хоть из 64 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2020, 17:44 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Kazantsev Alexey MMF поднимает в память только те данные, к которым происходит обращение Я когда-то проводил опыты по чтению файла разными кусками и разными способами Вы безусловно знакомы с разными методами подсчета памяти, и знаете почему один процесс может запросить, и получить больше памяти чем присутствует на компьютере. для ММФ немедленно выделяется виртуальное пространство (интервал адресов) из пространства процесса. Сколько начально поднимается с диска, зависит от оптимизаций в конкретной версии винды, возможно где-то описано, я уже не помню. Вы можете это легко проверить, применив ММФ к файлу больше, чем количество свободной физической памяти на компе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2020, 17:50 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
в копилку еще вариант (MappedFile.zip): https://www.nzlab.dk/codesnippets/codesnippets.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2020, 11:19 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey _Vasilisk_, Рихтера перечитай. з.ы. Показания диспетчера нужно ещё правильно интерпретировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2020, 14:51 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
YuRock Kazantsev Alexey _Vasilisk_, з.ы. Показания диспетчера нужно ещё правильно интерпретировать. Открыть - это как? Сделать ему MapView на весь объём?.. А зачем, если можно по частям? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2020, 16:22 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
YuRock Шо там интерпретиовать. Что там интерпретировать... А потом начинают путать адресное пространство с выделяемой памятью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2020, 16:34 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
alekcvp Открыть - это как? Сделать ему MapView на весь объём? alekcvp А зачем, если можно по частям? А вообще, могло бы быть полезно для удобства - для передачи в функцию, которая принимает указатель на память и размер. Например, в виндовую CryptHashData. Было бы прикольно, если бы винда держала бы в памяти только нужный блок, по которому идут обращения. Ну это так - мечты, мечты. Понятно, что это невозможно, т.к. винда знать не знает об этих обращениях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2020, 07:30 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
YuRock А вообще, могло бы быть полезно для удобства - для передачи в функцию, которая принимает указатель на память и размер. Например, в виндовую CryptHashData. Было бы прикольно, если бы винда держала бы в памяти только нужный блок, по которому идут обращения. Ну это так - мечты, мечты. Понятно, что это невозможно, т.к. винда знать не знает об этих обращениях. 1. Так 2 гига - это лимит на размер памяти в x86 винде, если без плясок с бубном. Как ты его весь под файл отдашь?.. 2. Ну как бы через ReadFile() ты такое тоже не вычитаешь, т.е. не вижу тут никаких недостатков перед ним. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2020, 10:48 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
YuRock Понятно, что это невозможно, т.к. винда знать не знает об этих обращениях. Винда-то, как раз, знает. Без этого знания не работал бы пейджинг. В таск менеджере даже счётчик соответствующий есть, Page Faults называется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2020, 13:43 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
ЕМНИП, при стандартном чтении менеджер кэша винды создает секции читаемого файла по 256кб. Это тоже mmf. Как и исполняемые файлы, и динамические библиотеки и пр. В книжке Руссиновича все это есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2020, 14:56 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
alekcvp Так 2 гига - это лимит на размер памяти в x86 винде alekcvp через ReadFile() ты такое тоже не вычитаешь, т.е. не вижу тут никаких недостатков перед ним ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2020, 15:20 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey YuRock Понятно, что это невозможно, т.к. винда знать не знает об этих обращениях. Винда-то, как раз, знает. Без этого знания не работал бы пейджинг. В таск менеджере даже счётчик соответствующий есть, Page Faults называется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2020, 15:26 |
|
||
|
Файлы, отображаемые в память.
|
|||
|---|---|---|---|
|
#18+
YuRock Это просто счетчик ошибок доступа. Но а вешать костыль на определение, mmf это или нет, и если да - при необходимости дочитывать кусочек - этого винда не делает. Конечно это счётчкик ошибок доступа. Когда ты мапишь файл, то физические страницы под него не выделяются, а просто резервируется адресное пространство. Затем, при попытке обратится по адресу из зарезервированного диапазона, возникает ошибка доступа т.к. реальной страницы в памяти нет. Система обрабатывает этот случай и подгружает страницу. Таким образом, счётчик увеличивается, а ты получаешь актуальные данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2020, 16:11 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40017852&tid=2037859]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
131ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 428ms |

| 0 / 0 |
