gpt4 book ai didi

c# - .NET 程序集内存使用

转载 作者:太空狗 更新时间:2023-10-30 00:19:48 24 4
gpt4 key购买 nike

假设我有两个完全独立的 .NET 应用程序,Foo.exeBoo.exe,它们都使用相同的库 TestLib.dll 位于 Foo 和 Boo 的 bin 文件夹中(两个副本)。

.NET 是否会同时加载这两个 dll,从而浪费 size_of_dll * 2 大小的 RAM,或者它会检查强程序集名称、大小等...并仅加载和加载两个程序集之一?

最佳答案

你说得对,DLL 的一个特性是使用该 DLL 的多个进程可以共享某些部分以减少内存使用(这是 Windows 特性,并非特定于 .Net),但我相当确定为此,两个进程必须在磁盘上加载相同的物理 DLL,在这种情况下,您描述的场景不会发生这种情况。

如果您改为安装到公共(public)位置(例如 GAC),则 Windows 将能够跨多个进程共享 DLL 的某些部分以节省内存。对于 .net 程序集,您还需要 NGen the assembly in order to take advantage of this

请注意,“保存”的内存量不是size_of_dll,因为该 DLL 镜像的某些部分无法共享,即该 DLL 的任何部分都可能被修改.这些部分仍然在多个进程中重复,以确保应用程序不会意外修改彼此的数据。

关于c# - .NET 程序集内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16653251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com