Несколько объемов потребляемой памяти процессов.NET

Я разрабатываю пакет приложений, который состоит из нескольких приложений, которые пользователь может запустить по мере необходимости (они могут выполнить все одновременно или только несколько..).

Мое беспокойство находится в месте физической памяти каждого процесса, как показано в диспетчере задач.

Я знаю, что Платформа делает управление памятью позади занавесок в терминах, что это посвящает части памяти для определенных вещей, которые непосредственно не связаны с моим приложением.

Вопрос. Платформа.NET имеет некоторый способ минимизировать объем потребляемой памяти процессов, которые это выполняет, когда существует несколько процессов, работающих одновременно? (Noobish предполагают вперед) Как, если System.dll уже загружается одним процессом, платформа загружает его для каждого процесса, или он имеет некоторый способ совместно использовать его между процессами?

Я никоим образом не стремлюсь записать максимально маленькие (мудрые ресурсом) приложения (если бы я был, то я, вероятно, не использовал бы Платформу.NET во-первых), но если бы существует что-то, что я могу сделать что-то о злоупотреблении ресурсов, я хотел бы знать об этом.

7
задан abatishchev 14 June 2010 в 12:55
поделиться

4 ответа

Когда NGEN используется для сборок до JIT, это делается таким образом, что если одна и та же сборка загружается в несколько процессов, исполняемый код может совместно использоваться ими (в противном случае каждый процесс чтобы иметь копию как исходного IL, так и JIT-скомпилированного кода).

Большинство (все?) Базовых библиотек в платформе скомпилированы NGEN при установке платформы частично по этой причине (а также для уменьшения времени первоначального запуска приложений .NET)

Рико является бесспорным экспертом в этом вопросе. : http://blogs.msdn.com/b/ricom/archive/2004/10/18/244242.aspx

Более того, многие из этих страниц могут использоваться в разных процессах, поэтому мы поощряем размещение кода, доступного для совместного использования. в изображения ngen'd - jit-код не может быть передан.

5
ответ дан 7 December 2019 в 07:40
поделиться

В операционной системе Windows есть способ минимизировать объем памяти след нескольких процессов. Он известен как пейджинг .

1
ответ дан 7 December 2019 в 07:40
поделиться

Я не ожидаю, что .net framework сделает что-то подобное, и мне это нравится. Причина в том, что я не доверю .net framework управление состоянием каждого процесса. Я имею в виду, что если DLL используется двумя процессами, контекст и состояние могут быть разными в каждом случае, и нам могут понадобиться разные экземпляры.

Например, возьмем winword.exe - если два процесса открыли два разных документа, в памяти будут работать два экземпляра winword. Я бы не хотел, чтобы .net f/w вмешивался в это, особенно когда речь идет о мире COM.

Однако, я бы оставил право самой DLL быть такой умной, вести себя как синглтон, если вы не хотите, чтобы несколько экземпляров работали одновременно.

0
ответ дан 7 December 2019 в 07:40
поделиться

CLR и JIT-компилятор - это обычные DLL-библиотеки Windows. В виртуальную память загружается только один экземпляр кода, его страницы являются общими для любого процесса .NET. Их данные являются частными для каждого процесса. То же самое верно для любой из сборок в .NET framework, они были ngen-ed, когда .NET был установлен на машине. Это, вероятно, не верно для вашего собственного кода, JIT-компилированный код не является доступным для совместного использования. В этом редко есть смысл, поскольку вы не часто запускаете одну и ту же программу более одного раза.

Точно так же, как .NET автоматически управляет памятью, так же поступает и Windows. Практически единственное, что вы можете сделать, это заставить вашу программу часто выгружаться на диск, установив Process.MaxWorkingSet. Это неразумно. Минимизация главного окна вашего приложения тоже поможет.

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

1
ответ дан 7 December 2019 в 07:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: