На самом деле принятый ответ от @AndrewHare неверен. Размещение сборок в GAC DOES помогает сократить использование памяти.
Это подтверждается Джеффри Рихтером (из Wintellect, который помогал разрабатывать CLR с командой .NET) в своей книге CLR через C # :
Установка сборок в GAC дает несколько преимуществ. GAC позволяет многим приложениям совместно использовать сборки, сокращая использование физической памяти в целом ....
Это также подтверждает Тесс Феррандез (Гуру памяти и производительности от Microsoft - https://blogs.msdn.microsoft.com/tess/2006/04/12/asp-net-memory-you-use-the-same-dll-in-multiple-applications-is-it-really-necessary-to-load-it-multiple-times).
По возможности строгое имя и установка в глобальный кэш сборок (GAC) любых сборок, которые используются более чем одним приложением ASP.NET. Это уменьшит потребление памяти.
Я также подтвердил это сам, протестировав (WinDbg, Task Manager и ProcExplorer) в качестве службы x64 WebAPI. Вы увидите, что частный рабочий набор ниже с приложением GAC'd. В случае с NGen вы снова увидите, что частный рабочий набор уменьшился. Тем не менее, ошибки страниц также значительно уменьшены в приложении NGen'd по сравнению с базовой линией (почти вдвое в моем тесте). Я не видел разницы в Page Faults между приложением GAC и приложением, не относящимся к GAC.
Обратите внимание, что лучшим решением в некоторых случаях является объединение NGen и GAC путем установки сборок NGen'd в GAC. Это оптимизирует использование памяти между приложениями, которые совместно используют сборки, а также обеспечивает повышение производительности при запуске приложения!