.net Запретить свопить объект на диск
От: #John Европа https://github.com/ichensky
Дата: 05.03.19 13:59
Оценка:
Здравствуйте,
есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.
Підтримати Україну у боротьбі з країною-терористом.

https://prytulafoundation.org/
https://u24.gov.ua/

Слава Збройним Силам України!!! Героям слава!!!
.net swap tmpfs ramfs
Re: .net Запретить свопить объект на диск
От: Sharov Россия  
Дата: 05.03.19 14:22
Оценка:
Здравствуйте, #John, Вы писали:

J>Здравствуйте,

J>есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.

Никак, это ОС рашает. Т.е. насколько я понимаю, какой-то галочки\настройки для ентого нет, да и врядли может быть. Либо надо памяти дофига ставить, либо своп отключить. Т.е. решается на системнон уровне.
Кодом людям нужно помогать!
Re: .net Запретить свопить объект на диск
От: RushDevion Россия  
Дата: 05.03.19 14:26
Оценка: 9 (1)
J>есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.

Посмотри VirtualLock API.
Теоретически, если запинить объект и взять его адрес, то может и получится.
Re[2]: .net Запретить свопить объект на диск
От: · Великобритания  
Дата: 05.03.19 14:34
Оценка: +2
Здравствуйте, RushDevion, Вы писали:

J>>есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.

RD>Посмотри VirtualLock API.
RD>Теоретически, если запинить объект и взять его адрес, то может и получится.
И ещё нужно чтобы объект размещался целиком ровно в lpAddress/dwSize. А то как правило большой сложный объект это хитрая структура в памяти, состоящая из множества кусков, раскиданных по разным адресам.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: .net Запретить свопить объект на диск
От: Sharowarsheg  
Дата: 05.03.19 16:46
Оценка: +2
Здравствуйте, #John, Вы писали:

J>Здравствуйте,

J>есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.

Никак. Можно драйвер написать, у них есть nonpaged memory. Все остальные пасутся. В основном потому, что наверняка не тебе одному приходила в голову такая идея — "пусть другие программы свопятся, а моя самая важная".
Re: .net Запретить свопить объект на диск
От: kov_serg Россия  
Дата: 05.03.19 16:54
Оценка: -1
Здравствуйте, #John, Вы писали:

J>Здравствуйте,

J>есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.

Отключи швап файл нафиг.
Re[2]: .net Запретить свопить объект на диск
От: rm822 Россия  
Дата: 06.03.19 16:01
Оценка:
Здравствуйте, RushDevion, Вы писали:

J>>есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.


RD>Посмотри VirtualLock API.

RD>Теоретически, если запинить объект и взять его адрес, то может и получится.
Не может.
Re[3]: .net Запретить свопить объект на диск
От: · Великобритания  
Дата: 06.03.19 16:32
Оценка:
Здравствуйте, ·, Вы писали:

J>>>есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.

RD>>Посмотри VirtualLock API.
RD>>Теоретически, если запинить объект и взять его адрес, то может и получится.
·>И ещё нужно чтобы объект размещался целиком ровно в lpAddress/dwSize. А то как правило большой сложный объект это хитрая структура в памяти, состоящая из множества кусков, раскиданных по разным адресам.
Ах да, помимо данных у объекта есть ещё и код, который ВНЕЗАПНО тоже может засвопиться. Это ты уже вообще практически никак не выловишь в виртуальной машине, ибо код этот толи в .dll лежит, толи jit его куда-то запихал... Короче, это тебе драйвера или ядрёные модули какие-нибудь писать надо.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: .net Запретить свопить объект на диск
От: Pavel Dvorkin Россия  
Дата: 13.03.19 17:22
Оценка: +1
Здравствуйте, #John, Вы писали:

J>Здравствуйте,

J>есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.

Если Interop не пугает и с C знаком, то

https://docs.microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-allocateuserphysicalpages
https://docs.microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-mapuserphysicalpages
https://docs.microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-freeuserphysicalpages

Memory allocated by this function must be physically present in the system. After the memory is allocated, it is locked down and unavailable to the rest of the virtual memory management system.

Но тут есть нюанс

The SeLockMemoryPrivilege privilege must be enabled in the caller's token or the function will fail with ERROR_PRIVILEGE_NOT_HELD.

А ее по умолчанию не дают никому, что и понятно — если все начнут таким образом блокировать страницы физической памяти, то памяти не напасешься.
With best regards
Pavel Dvorkin
Re[2]: .net Запретить свопить объект на диск
От: Слава  
Дата: 13.03.19 18:58
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>А ее по умолчанию не дают никому, что и понятно — если все начнут таким образом блокировать страницы физической памяти, то памяти не напасешься.


Для дотнета в любом случае это очень уж круто. Придётся чуть ли не свой загрузчик классов писать.
Re[3]: .net Запретить свопить объект на диск
От: Pavel Dvorkin Россия  
Дата: 14.03.19 07:14
Оценка: -2
Здравствуйте, Слава, Вы писали:

С>Для дотнета в любом случае это очень уж круто. Придётся чуть ли не свой загрузчик классов писать.


Не более круто, чем создание неуправяемой DLL, которая выделяет неуправляемую память с помощью, например, VirtualAlloc.

Загрузка классов тут ни при чем — просто в конструкторе выделяешь, в Dispose освобождаешь.
With best regards
Pavel Dvorkin
Re[4]: .net Запретить свопить объект на диск
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.03.19 11:38
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Не более круто, чем создание неуправяемой DLL, которая выделяет неуправляемую память с помощью, например, VirtualAlloc.


PD>Загрузка классов тут ни при чем — просто в конструкторе выделяешь, в Dispose освобождаешь.


Это cработает для массивов value типов. А если тебя, скажем, словарь, где ключ и значение это объекты сложной структуры ? Как ты узнаешь, по каким адресам разложено все, что относится к твоему объекту?
Re[5]: .net Запретить свопить объект на диск
От: Pavel Dvorkin Россия  
Дата: 18.03.19 12:36
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Это cработает для массивов value типов. А если тебя, скажем, словарь, где ключ и значение это объекты сложной структуры ? Как ты узнаешь, по каким адресам разложено все, что относится к твоему объекту?


Никак. Это вообще не относится ни к классам, ни к value типам. Это неуправляемая память, не под контролем .Net. То же самое, как если бы мы просто сделали DLL на C и выделили там блок памяти. Вот только в этом случае она несвопируемая.
With best regards
Pavel Dvorkin
Re[6]: .net Запретить свопить объект на диск
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.03.19 13:46
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

I>>Это cработает для массивов value типов. А если тебя, скажем, словарь, где ключ и значение это объекты сложной структуры ? Как ты узнаешь, по каким адресам разложено все, что относится к твоему объекту?


PD>Никак. Это вообще не относится ни к классам, ни к value типам. Это неуправляемая память, не под контролем .Net. То же самое, как если бы мы просто сделали DLL на C и выделили там блок памяти. Вот только в этом случае она несвопируемая.


Читаем вместе: "есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.
"
Re[7]: .net Запретить свопить объект на диск
От: Pavel Dvorkin Россия  
Дата: 18.03.19 16:47
Оценка: -1
Здравствуйте, Ikemefula, Вы писали:

I> Читаем вместе: "есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.


Пофлеймить захотелось ?
With best regards
Pavel Dvorkin
Re[8]: .net Запретить свопить объект на диск
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 20.03.19 10:32
Оценка: -1
Здравствуйте, Pavel Dvorkin, Вы писали:

I>> Читаем вместе: "есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.


PD>Пофлеймить захотелось ?


Ты описал решение, а потом сказал, что решения нет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.