Можно ли уменьшить рабочий набор управляемого приложения, выгружая неуправляемые библиотеки с AfxFreeLibrary? - PullRequest
0 голосов
/ 17 октября 2008

У меня есть управляемое приложение Windows, которое загружает управляемый компонент C ++, который использует AfxLoadLibrary для загрузки стороннего компонента, если он присутствует на клиентском компьютере. После обнаружения я выгружаю компонент с помощью AfxFreeLibrary, пытаясь уменьшить рабочий набор управляемого родительского приложения.

Вызов AfxFreeLibrary выполнен успешно (проверено с помощью Process Explorer), но память не освобождена. Это связано с природой управляемого приложения или есть способ освободить это пространство процесса?

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

1 Ответ

1 голос
/ 18 октября 2008

Должно быть, вы можете доказать это, написав чистое нативное приложение и увидев рабочий набор. Однако рабочий набор - это размер памяти, необходимый для запуска приложения, поэтому, если код, используемый dll, может быть заменен, то рабочий набор не будет уменьшен - Windows не считает его частью рабочего набора. .

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

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

Единственный способ уменьшить рабочий набор состоит в том, чтобы ваше приложение использовало меньше памяти. Поскольку это приложение .NET, скорее всего, вы совсем не контролируете его (так как GC решит, сколько памяти «активно» и нужно в рабочем наборе)

...