powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Файлы, отображаемые в память.
25 сообщений из 57, страница 2 из 3
Файлы, отображаемые в память.
    #40017701
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ежов Дмитрий Сергеевич
Мне надо, чтобы файлик записался, даже несмотря на то, что процесс умер.


MMF для этого не предназначен, и не сможет такого гарантировать.
Гарантия записи при смерти юзер процесса появляется после закрытия системного хэндла (HFILE).

Если нужно гарантировать - закрывайте файл (все хэндлы) и открывайте заново. По-другому мне неизвестно.

MMF был первоначально сделан для внутренних нужд Винды, и оптимизации там касаются в основном чтения.
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40017718
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0r
насколько я помню из результатов изначального сравнения - MMF дает большой прирост к скорости непоследовательного чтения
Зависит от того, какими блоками читать. Если по одному байту, то дает, а если по 4096 байт, то выигрыша вообще нет. Т.е. сама операция чтения проходит быстрее, но для MMF тратится куча времени на вызов MapViewOfFile
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40017719
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ежов Дмитрий Сергеевич
мммм, неумирающий серверный процесс в сложных системах, без утечек памяти и кривых сторонних компонентов и кривого легаси от девопса. Что может быть естественней...
Вы не поверите, но у нас именно такие процессы и пишутся
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40017731
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Vizit0r
насколько я помню из результатов изначального сравнения - MMF дает большой прирост к скорости непоследовательного чтения
Зависит от того, какими блоками читать. Если по одному байту, то дает, а если по 4096 байт, то выигрыша вообще нет. Т.е. сама операция чтения проходит быстрее, но для MMF тратится куча времени на вызов MapViewOfFile

по паре кб, но в разных местах файла, и часто-частно.
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40017735
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vizit0r,

а файл, меньше двух гигов, и не sparse?
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40017736
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vizit0r
_Vasilisk_

Зависит от того, какими блоками читать. Если по одному байту, то дает, а если по 4096 байт, то выигрыша вообще нет. Т.е. сама операция чтения проходит быстрее, но для MMF тратится куча времени на вызов MapViewOfFile

по паре кб, но в разных местах файла, и часто-частно.


В этом случае ММФ должен рулить, особенно если working set небольшой.
Работа с памятью намного привычнее и удобнее чем seek/read, и ММФ не требует загрузки всего файла в память.

Без ММФ, если вы выделите массив, и прочитаете туда весь файл чтоб получить удобства памяти, этот массив все равно будет участвовать в ММФ без вашего ведома, только не с первоначальным файлом, а с pagefile. И тогда может оказаться медленнее, т.к. выгрузка в pagefile требует запись на диск, а read-only MMF просто выкидывает старые страницы и читает их заново из оригинала.
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40017828
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
ММФ не требует загрузки всего файла в память.
Требует. Для вас это сюрприз?

Вызовите MapViewOfFile для 100 мегабайт и посмотрите не время візова и на потребляемую память
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40017852
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

MMF поднимает в память только те данные, к которым происходит обращение. Кроме того, поднятые в память страницы в любой момент могут быть отданы системе, если будет такая необходимость. Если ты последовательно прошелся по всему файлу, то, в зависимости от условий выполнения, в рабочем наборе приложения может быть полный набор страниц файла, но это не то же самое, что выделить буффер и засосать в него весь файл.
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40017878
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
MMF поднимает в память только те данные, к которым происходит обращение
Открой диспетчер задач и посмотри на потребление памяти.

Я когда-то проводил опыты по чтению файла разными кусками и разными способами
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40017880
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Рихтера перечитай.

з.ы. Показания диспетчера нужно ещё правильно интерпретировать.
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40017882
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Vizit0r,

а файл, меньше двух гигов, и не sparse?

файлы в районе 100-150 мб, а sparce - это имееется в виду фрагментированность? Если да, то специальной дефрагментацией никто не заморачивается, ни я, ни тем более пользователи.
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40018062
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vizit0r
НеофитSQL
Vizit0r,

а файл, меньше двух гигов, и не sparse?

файлы в районе 100-150 мб, а sparce - это имееется в виду фрагментированность? Если да, то специальной дефрагментацией никто не заморачивается, ни я, ни тем более пользователи.


Sparse file - это файлы с дырками, для которых не отведено место на диске. Например, в первом килобайте есть данные, в 100500 килобайте есть данные, а между ними нет ничего, и места на диске не занимает. Дырка при чтении даст нули, а при записи начнет аллокировать кластеры диска, или какие там у конкретной системы единицы аллокации.

Если у вас таких файлов нет, то это не ваш головняк. Фрагментация диска на работу ММФ не влияет, 200МБ позволяет легко работать хоть из 32-бит, хоть из 64
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40018068
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_
Kazantsev Alexey
MMF поднимает в память только те данные, к которым происходит обращение
Открой диспетчер задач и посмотри на потребление памяти.

Я когда-то проводил опыты по чтению файла разными кусками и разными способами


Вы безусловно знакомы с разными методами подсчета памяти, и знаете почему один процесс может запросить, и получить больше памяти чем присутствует на компьютере.

для ММФ немедленно выделяется виртуальное пространство (интервал адресов) из пространства процесса.
Сколько начально поднимается с диска, зависит от оптимизаций в конкретной версии винды, возможно где-то описано, я уже не помню.

Вы можете это легко проверить, применив ММФ к файлу больше, чем количество свободной физической памяти на компе.
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40018257
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в копилку еще вариант (MappedFile.zip):
https://www.nzlab.dk/codesnippets/codesnippets.htm
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40018316
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
_Vasilisk_,

Рихтера перечитай.

з.ы. Показания диспетчера нужно ещё правильно интерпретировать.
Шо там интерпретиовать. Открыть файл на 2 гига в 32-бит программе и пробежаться по нему (хэш посчитать, например). Будет OOM.
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40018335
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Kazantsev Alexey
_Vasilisk_,
з.ы. Показания диспетчера нужно ещё правильно интерпретировать.
Шо там интерпретиовать. Открыть файл на 2 гига в 32-бит программе и пробежаться по нему (хэш посчитать, например). Будет OOM.

Открыть - это как? Сделать ему MapView на весь объём?.. А зачем, если можно по частям?
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40018339
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Шо там интерпретиовать.

Что там интерпретировать... А потом начинают путать адресное пространство с выделяемой памятью.
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40018649
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Открыть - это как? Сделать ему MapView на весь объём?
Да.
alekcvp
А зачем, если можно по частям?
В данном случае - для эксперимента. Чтобы убедиться, что не получится видеть только необходимое, открыв всё.
А вообще, могло бы быть полезно для удобства - для передачи в функцию, которая принимает указатель на память и размер. Например, в виндовую CryptHashData.
Было бы прикольно, если бы винда держала бы в памяти только нужный блок, по которому идут обращения. Ну это так - мечты, мечты. Понятно, что это невозможно, т.к. винда знать не знает об этих обращениях.
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40018698
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock

А вообще, могло бы быть полезно для удобства - для передачи в функцию, которая принимает указатель на память и размер. Например, в виндовую CryptHashData.
Было бы прикольно, если бы винда держала бы в памяти только нужный блок, по которому идут обращения. Ну это так - мечты, мечты. Понятно, что это невозможно, т.к. винда знать не знает об этих обращениях.

1. Так 2 гига - это лимит на размер памяти в x86 винде, если без плясок с бубном. Как ты его весь под файл отдашь?..
2. Ну как бы через ReadFile() ты такое тоже не вычитаешь, т.е. не вижу тут никаких недостатков перед ним.
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40018818
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Понятно, что это невозможно, т.к. винда знать не знает об этих обращениях.

Винда-то, как раз, знает. Без этого знания не работал бы пейджинг. В таск менеджере даже счётчик соответствующий есть, Page Faults называется.
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40018876
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕМНИП, при стандартном чтении менеджер кэша винды создает секции читаемого файла по 256кб. Это тоже mmf. Как и исполняемые файлы, и динамические библиотеки и пр.
В книжке Руссиновича все это есть.
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40018900
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Так 2 гига - это лимит на размер памяти в x86 винде
Спасибо, кэп.
alekcvp
через ReadFile() ты такое тоже не вычитаешь, т.е. не вижу тут никаких недостатков перед ним
Я не недостатки искал, а мечтал о преимуществах.
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40018907
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
YuRock
Понятно, что это невозможно, т.к. винда знать не знает об этих обращениях.

Винда-то, как раз, знает. Без этого знания не работал бы пейджинг. В таск менеджере даже счётчик соответствующий есть, Page Faults называется.
Это просто счетчик ошибок доступа. Но а вешать костыль на определение, mmf это или нет, и если да - при необходимости дочитывать кусочек - этого винда не делает. И я считаю, что это верно. Хотя и жаль, конечно.
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40018935
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Это просто счетчик ошибок доступа. Но а вешать костыль на определение, mmf это или нет, и если да - при необходимости дочитывать кусочек - этого винда не делает.

Конечно это счётчкик ошибок доступа. Когда ты мапишь файл, то физические страницы под него не выделяются, а просто резервируется адресное пространство. Затем, при попытке обратится по адресу из зарезервированного диапазона, возникает ошибка доступа т.к. реальной страницы в памяти нет. Система обрабатывает этот случай и подгружает страницу. Таким образом, счётчик увеличивается, а ты получаешь актуальные данные.
...
Рейтинг: 0 / 0
Файлы, отображаемые в память.
    #40019191
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

гугли: защищенный режим X86, дескрипторы страниц
...
Рейтинг: 0 / 0
25 сообщений из 57, страница 2 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Файлы, отображаемые в память.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]