AppDomain 卸载后程序集未卸载?

2023-12-19

我使用 AppDomain 来加载程序集然后卸载它们。

但是,我遇到了一个非常棘手的问题。卸载 AppDomain 后 - 我仍然可以在进程资源管理器中看到某些程序集被加载了多次! 为什么还有加载的程序集的剩余部分? AppDomain.Unload 不会释放 AppDomain 的所有已加载内存吗?

您可以在附图中看到:

总 AppDomain 为 3(我在进程的生命周期中创建了 3 个 AppDomain)

AppDomains:1(当前仅存在 1 个 AppDomain)

由于某种原因,正如您在下面的加载的 DLL 部分中看到的那样 - 程序集被多次加载到进程中。

Code:

AppDomain fetcherDomain = AppDomain.CreateDomain("StatusFetcher");
try
{
    var fetcher = (LocalStatusFetcher)fetcherDomain.CreateInstanceFromAndUnwrap(Assembly.GetExecutingAssembly().CodeBase, typeof(LocalStatusFetcher).FullName);
    //doing some other stuff that is not interesting...
}
finally
{
    AppDomain.Unload(fetcherDomain);
}

是的,LocalStatusFetcher 确实继承了 MarshalByRefObject...


您加载到外部应用程序域中的程序集很可能会渗入到当前应用程序域中。有tons有多种可能发生这种情况的方法,但你的问题尤其是通过Assembly.GetExecutingAssembly().CodeBase to the CreateInstanceFromAndUnwrap方法。致电Assembly.GetExecutingAssembly()将当前正在执行的程序集加载到current应用程序域,并传递.CodeBase财产给CreateInstanceFromAndUnwrap在实例化目标代理之前,将尝试将目标程序集(位于应用程序路径或 GAC 中)加载到目标域中。目前,除了可能出现的出血问题之外,我认为这段代码没有任何问题。

如果您有多个应用程序域,那么您将在 LoadFrom 上下文中看到程序集的多个副本,因为only跨 AppDomains 共享的程序集是 mscorlib.dll。除非我误解了你的问题,否则我认为你所看到的是正常的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AppDomain 卸载后程序集未卸载? 的相关文章

  • ASP.NET MVC 中 ModelState.AddModelError 中的关键参数有什么意义?

    我在我的控制器中添加了验证检查来修改ModelState如果验证失败 例如 private bool ValidateMoney string raw string name decimal min decimal max try var
  • 解决找不到程序集的问题 |文件未找到异常 |融合日志

    我正在尝试将我的解决方案包 wsp 部署到 SharePoint 2007 环境 WSP 包含一个功能 该功能加载功能接收器类以在运行时部署计时器作业 在部署此 WSP 时 我不断得到 特征 fb631f6c 2c46 4ab5 b7b3
  • 调整图像的亮度、对比度和伽玛值

    在 NET 中调整图像的亮度 对比度和伽玛值的简单方法是什么 c and gdi have a simple way to control the colors that are drawn It s basically a ColorMa
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • VB.NET 中的静态方法实现

    我很困惑Static在 VB NET 中的实现 在 C 中 我们可以创建静态类和静态方法来为我们的应用程序编写实用方法 现在 VB NET 让我们创建Module代替静态类 如果我们在模块中创建一个方法 默认情况下它会变成静态的 但在我的应
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 抛出并保留堆栈跟踪不符合代码分析所描述的预期

    进行代码分析给了我项目 CA2200 CA2200 重新抛出以保留堆栈详细信息 func 重新抛出捕获的异常并将其显式指定为参数 请改用不带参数的 throw 以保留最初引发异常的堆栈位置 我已经实现了该建议 但无论如何我似乎都得到了相同的
  • 防止重入并确保某些操作获取锁的正确方法是什么?

    我正在设计一个基类 当继承该基类时 它将针对多线程环境中的上下文提供业务功能 每个实例可能都有长时间运行的初始化操作 所以我想让这些对象可重用 为此 我需要能够 为这些对象之一分配上下文以允许其完成工作 防止对象在已有上下文的情况下被分配新
  • 以编程方式设置 maxRequestLength

    有一个配置值叫做maxRequestLength 在配置文件中 它看起来像这样
  • 如何计算最低系统要求?

    对于我用 Visual C 编写的应用程序 Testing 不 真的 这就是全部
  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • 尝试对无法访问的主机进行套接字操作

    一位客户在连接到我们的服务器服务的 WCF 客户端上报告了此错误 消息 尝试对无法访问的主机进行套接字操作 类型 System Net Sockets SocketException 从这个链接http msdn microsoft com
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 尽管连接字符串超时 3 秒,Sql 连接仍等待 15 秒

    我有一个通过本地网络使用 Microsoft SQL 2008 服务器的网站 有时 SQL Server 机器会重新启动 因此网站无法连接到数据库 如果机器已启动并运行 则will反应快 如果已关闭 则无需等待 15 秒 3秒就可以了 我想
  • 异常助手中缺少“查看详细信息”

    最近 在 Visual Studio 2015 update 3 中 异常助手的行为发生了变化 我不再看到 查看详细信息 选项 并且堆栈跟踪也不会展开 如果我选择 使用托管兼容模式 它就会起作用 所有 C 项目都会发生这种情况 另一件事是
  • 通过 Applescript 发送电子邮件时发件人不正确

    下面的 Applescript 是我多年来使用的形式 基本上是一种众所周知的使用 Applescript 发送电子邮件的方法 tell application Mail set newMessage to make new outgoing
  • cakephp 2 css、javascript 和链接在本地计算机/localhost 上不起作用

    我应该在 webroot 文件夹上使用什么 htaccess 设置 似乎这是布局中所有链接不起作用的罪魁祸首 这是 webroot 文件夹内的 htaccess 代码
  • 使用 Powershell 替换列值

    我正在尝试循环遍历 csv 并替换名为的列中的任何值Enabled from True to A Import Csv test csv Where Object Enabled eq True gt what goes here to r
  • Haskell 函数 (a -> [b]) -> [a -> b]

    我有一个函数seperateFuncs这样 seperateFuncs a gt b gt a gt b seperateFuncs xs x gt map x xs 我想知道相反的情况是否存在 即是否有一个函数 joinFuncs a g
  • SWIG:以 OO 方式包装 C API

    我有一个 C 不是 C 库 它始终使用函数的第一个参数作为上下文对象 让我们调用类型t context 我想使用 SWIG 生成 C 包装器 保持这种调用风格 即 不是将函数或多或少地隔离 而是将它们包装为某个类中的方法并访问t conte
  • Xcode 10 上的模拟器变得非常慢

    在 Xcode 9 上一切都很完美 但是更新到 Xcode 10 后 模拟器开始出现巨大的滞后 超级简单的动画以 2 fps 的速度运行 而当模拟器上的动画运行时 整个 Mac OS 的运行速度非常慢 有人知道发生了什么以及如何解决这个问题
  • 为什么会出现这个未处理的 org.apache.tiles.impl.CannotRenderException?

    实际上 我正在致力于在在线考试项目上实现 Struts Spring 和 Hibernate 集成 但是当我在 JSP 页面中提交值时 它会抛出以下错误 Struts 问题报告 Struts has detected an unhandle
  • Django 应用程序中的访问控制允许来源

    我正在为基于 Django 的应用程序开发 Phonegap 应用程序 但是当尝试进行 Ajax 调用时 我收到此错误 XMLHttpRequest cannot load http domain herokuapp com getcsrf
  • UIWebView:页面什么时候真正完成加载?

    我需要知道 当 UIWebView 完全加载网页时 我的意思是 当所有重定向完成并且动态加载的内容准备就绪时 真的完全完成了 我尝试注入 javascript 查询document readyState complete 但这似乎不太可靠
  • 使用 IoC、依赖注入、工作单元的 Linq to SQL 的存储库模式

    似乎有很多关于为 Linq to SQL 实现存储库模式的示例 其中大多数以 IRepository 和 DI 为特色 有些已经实现了工作单元 有些则没有 我尝试阅读 SO 和 Google 对 Linq to SQL 存储库模式的搜索返回
  • 将枚举转换为值数组(将所有 JSON 值放入数组中)

    我用这个方法JavaScript 中的枚举 https stackoverflow com questions 287903 enums in javascript在我们的代码中创建枚举 So var types WHITE 0 BLACK
  • 无法识别获取内容命令

    我们有通常在 UNIX 环境中执行的脚本 以下是脚本中的一行 command gt use bin tail n 1 path grep silent F message rm f path 当在 PowerShell 中运行时 use b
  • RecyclerView动态标题

    我一直在使用 RecyclerView 添加动态标头 我提供了一个示例图像 如下所示 在上图中 孩子们是有限的 但我的情况并非如此 标题之后我的孩子们不确定 基本上代替header0这将是月份名称MAR以及下面发生的事情MAR月将至 数据来
  • 从意图中获取 Alexa Slot 值

    我正在努力构建 Alexa 技能 但在从意图对象中获取槽值时遇到了障碍 意图对象 JSON 如下所示 intent name string slots string name string value string 我的问题是识别插槽的第一
  • 404 尝试发布文件主题时出错

    我正在尝试在我的 d2l orgUnit 中创建内容 但我不断收到 404 页面未找到的消息 我是从 Android 模拟器调用这个的 我已使用 POST API 成功创建了一个模块和主题链接 我确实看过这个帖子404 将内容发布到 Des
  • 在 shell 脚本中使用 read 命令按行读取输入文件会跳过最后一行

    我通常使用 read 命令将输入 文件逐行读取到 shell 脚本中 如果未在输入文件 blah txt 的最后一行末尾插入新行 则如下所示的示例代码将产生错误结果 bin sh while read line do echo line d
  • 如何使用 JQuery 获取特定表单字段值

    我有一个表格
  • AppDomain 卸载后程序集未卸载?

    我使用 AppDomain 来加载程序集然后卸载它们 但是 我遇到了一个非常棘手的问题 卸载 AppDomain 后 我仍然可以在进程资源管理器中看到某些程序集被加载了多次 为什么还有加载的程序集的剩余部分 AppDomain Unload