Здравствуйте,
есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.
Підтримати Україну у боротьбі з країною-терористом.
Здравствуйте, #John, Вы писали:
J>Здравствуйте, J>есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.
Никак, это ОС рашает. Т.е. насколько я понимаю, какой-то галочки\настройки для ентого нет, да и врядли может быть. Либо надо памяти дофига ставить, либо своп отключить. Т.е. решается на системнон уровне.
J>есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.
Посмотри VirtualLock API.
Теоретически, если запинить объект и взять его адрес, то может и получится.
Здравствуйте, RushDevion, Вы писали:
J>>есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей. RD>Посмотри VirtualLock API. RD>Теоретически, если запинить объект и взять его адрес, то может и получится.
И ещё нужно чтобы объект размещался целиком ровно в lpAddress/dwSize. А то как правило большой сложный объект это хитрая структура в памяти, состоящая из множества кусков, раскиданных по разным адресам.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, #John, Вы писали:
J>Здравствуйте, J>есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.
Никак. Можно драйвер написать, у них есть nonpaged memory. Все остальные пасутся. В основном потому, что наверняка не тебе одному приходила в голову такая идея — "пусть другие программы свопятся, а моя самая важная".
Здравствуйте, #John, Вы писали:
J>Здравствуйте, J>есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.
Здравствуйте, RushDevion, Вы писали:
J>>есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.
RD>Посмотри VirtualLock API. RD>Теоретически, если запинить объект и взять его адрес, то может и получится.
Не может.
Здравствуйте, ·, Вы писали:
J>>>есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей. RD>>Посмотри VirtualLock API. RD>>Теоретически, если запинить объект и взять его адрес, то может и получится. ·>И ещё нужно чтобы объект размещался целиком ровно в lpAddress/dwSize. А то как правило большой сложный объект это хитрая структура в памяти, состоящая из множества кусков, раскиданных по разным адресам.
Ах да, помимо данных у объекта есть ещё и код, который ВНЕЗАПНО тоже может засвопиться. Это ты уже вообще практически никак не выловишь в виртуальной машине, ибо код этот толи в .dll лежит, толи jit его куда-то запихал... Короче, это тебе драйвера или ядрёные модули какие-нибудь писать надо.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, #John, Вы писали:
J>Здравствуйте, J>есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.
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.
А ее по умолчанию не дают никому, что и понятно — если все начнут таким образом блокировать страницы физической памяти, то памяти не напасешься.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>А ее по умолчанию не дают никому, что и понятно — если все начнут таким образом блокировать страницы физической памяти, то памяти не напасешься.
Для дотнета в любом случае это очень уж круто. Придётся чуть ли не свой загрузчик классов писать.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Не более круто, чем создание неуправяемой DLL, которая выделяет неуправляемую память с помощью, например, VirtualAlloc.
PD>Загрузка классов тут ни при чем — просто в конструкторе выделяешь, в Dispose освобождаешь.
Это cработает для массивов value типов. А если тебя, скажем, словарь, где ключ и значение это объекты сложной структуры ? Как ты узнаешь, по каким адресам разложено все, что относится к твоему объекту?
Здравствуйте, Ikemefula, Вы писали:
I>Это cработает для массивов value типов. А если тебя, скажем, словарь, где ключ и значение это объекты сложной структуры ? Как ты узнаешь, по каким адресам разложено все, что относится к твоему объекту?
Никак. Это вообще не относится ни к классам, ни к value типам. Это неуправляемая память, не под контролем .Net. То же самое, как если бы мы просто сделали DLL на C и выделили там блок памяти. Вот только в этом случае она несвопируемая.
Здравствуйте, Pavel Dvorkin, Вы писали:
I>>Это cработает для массивов value типов. А если тебя, скажем, словарь, где ключ и значение это объекты сложной структуры ? Как ты узнаешь, по каким адресам разложено все, что относится к твоему объекту?
PD>Никак. Это вообще не относится ни к классам, ни к value типам. Это неуправляемая память, не под контролем .Net. То же самое, как если бы мы просто сделали DLL на C и выделили там блок памяти. Вот только в этом случае она несвопируемая.
Читаем вместе: "есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.
"
Здравствуйте, Ikemefula, Вы писали:
I> Читаем вместе: "есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.
Здравствуйте, Pavel Dvorkin, Вы писали:
I>> Читаем вместе: "есть большой объект, как в .net запретить спопить его на диск, даже если паралельно с этой программой будут запущены другие, что бы свопилась память из других программ, но не из текущей.
PD>Пофлеймить захотелось ?
Ты описал решение, а потом сказал, что решения нет