当对象(例如位图)成为孤立对象时,如何处理它?

2024-01-12

我有一个 A 类,为其他 B、C 类等提供位图。

现在,A 类将其位图保存在环形队列中,因此一段时间后它将失去对该位图的引用。

当它仍在队列中时,同一个位图可以由多个类检出,这样,B 和 C 都可以保存对此同一个位图的引用。但也可能发生只有其中一个人检查了位图,甚至没有人检查过该位图的情况。

当 A、B 或 C 不再需要位图时,我想将其处理掉。

我想我必须让 B 和 C 在完成使用时以某种方式负责发出信号,但我不确定整体逻辑。

如果是对类似 DisposeIfNowOrphan() 的调用,则在本例中将被调用三次:

1 - 当位图被踢出 A 类队列时

2 - 当 B 完成时

3 - 当 C 完成时

如果这是最好的策略,我如何评估孤儿状态?

任何建议将非常受欢迎。


让 A 类提供包装类而不是直接提供位图。包装类本身应该实现 IDisposable 并可用于维护计数器。每个消费者都可以获得自己的包装器,该包装器引用相同的位图。 A 类保留所有位图和所有包装器的陷阱。在 A 类中使用 Wea​​kReference 来跟踪包装器,因此如果使用者不调用 dispose,它将被 GC 处理,并且提供者可以知道它不再被引用。

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

当对象(例如位图)成为孤立对象时,如何处理它? 的相关文章

  • 添加对共享类的多个 WCF 服务的服务引用

    我正在尝试将我的 WCF Web 服务拆分为几个服务 而不是一个巨大的服务 但是 Visual Studio Silverlight 客户端 复制了两个服务共享的公共类 这是一个简单的例子来说明我的问题 在此示例中 有两个服务 两者都返回类
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • 在 Xcode4 中使用 Boost

    有人设置 C Xcode4 项目来使用 Boost 吗 对于一个简单的 C 控制台应用程序 我需要在 Xcode 中设置哪些设置 Thanks 用这个来管理它 和这个
  • 为什么 std::allocator 在 C++17 中丢失成员类型/函数?

    一边看着std 分配器 http en cppreference com w cpp memory allocator 我看到成员 value type pointer const pointer reference const refer
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • C# 创建数组的数组

    我正在尝试创建一个将使用重复数据的数组数组 如下所示 int list1 new int 4 1 2 3 4 int list2 new int 4 5 6 7 8 int list3 new int 4 1 3 2 1 int list4
  • C# 编译器如何决定发出可重定向的程序集引用?

    NET Compact Framework 引入了可重定向程序集引用 现在用于支持可移植类库 基本上 编译器会发出以下 MSIL assembly extern retargetable mscorlib publickeytoken 7C
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • Fluent NHibernate 日期时间 UTC

    我想创建一个流畅的 nhibernate 映射来通过以下方式映射 DateTime 字段 保存时 保存 UTC 值 读取时 调整为本地时区值 实现此映射的最佳方法是什么 就我个人而言 我会将日期存储在 UTC 格式的对象中 然后在读 写时在
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12
  • 如何使用 std::array 模拟 C 数组初始化“int arr[] = { e1, e2, e3, ... }”行为?

    注意 这个问题是关于不必指定元素数量并且仍然允许直接初始化嵌套类型 这个问题 https stackoverflow com questions 6111565 now that we have stdarray what uses are

随机推荐

  • 如何在 JavaScript 中使用 x,y 坐标模拟点击?

    是否可以使用给定的坐标来模拟网页中 JavaScript 的点击 您可以派遣一个click事件 尽管这与真正的点击不同 例如 它不能用于欺骗跨域 iframe 文档 使其认为它已被单击 所有现代浏览器都支持document elementF
  • 在Python中按索引从列表中删除元素的简洁方法

    我有一个字符列表和索引列表 myList a b c d toRemove 0 2 我想通过一次操作得到这个 myList b d 我可以做到这一点 但有没有办法做得更快 toRemove reverse for i in toRemove
  • Java FileWriter 和 BufferedWriter 的区别

    它们之间有什么区别 我刚刚学习 Java ATM 但似乎我可以两种方式写入文件 我没有在这里复制 try catch 块 FileWriter file new FileWriter foo txt file write foobar fi
  • 张量流:在多个检查点运行模型评估

    在我当前的项目中 我训练一个模型并每 100 个迭代步骤保存检查点 检查点文件全部保存到同一目录 model ckpt 100 model ckpt 200 model ckpt 300 等 之后 我想根据所有已保存检查点 而不仅仅是最新检
  • WPF 数据网格样式

    有谁知道 有如何将 WPF DataGrid 布局更改为卡片视图或其他任何东西的示例 而不仅仅是行堆栈 结果看起来像这样 替代文本 http iwebthereforeiam com files ScreenShot gif http iw
  • 如何保证训练阶段不会出现OOM?

    标题中的问题已经完成 如何保证训练阶段不会出现OOM 只是一些旁注 根据我的经验 有两种 OOM 情况 一种是模型和小批量所需的内存大于您拥有的内存 在这种情况下 训练阶段将永远不会开始 解决这个问题的解决方案是使用较小的批量大小 尽管如果
  • 使用 Argonaut 进行 Scalaz 验证

    我有一个案例类和伴随对象 case class Person private name String age Int object Person def validAge age Int if age gt 18 age successNe
  • 我们如何在 Android 中播放/缓冲几分钟的视频?

    我需要播放视频的前 2 分钟 使用 onBufferingUpdate 我得到缓冲的百分比 但当 onPrepared 被调用时 我的缓冲百分比为 40 这是一个超过 2 分钟的视频 考虑到我有一个30分钟的视频 有什么办法可以让我只播放
  • PIL / urllib2 - 使用 StringIO 传递文件时无法识别图像文件

    我正在使用 urllib2 从网络下载图像 一旦我下载了它 我想使用一个名为 PIL 的图像模块来用它做一些事情 我不想将文件保存到磁盘然后重新打开 而是使用从内存中传递它StringIO from PIL import Image ima
  • 当 ng-grid 通过 ng-hide 将可见性从不可见更改为可见时,不会重新计算网格宽度

    我有一个带有 ng hide 属性和 width 100 样式的 ng grid div class grid style style display inline block height 300px width 100 div 该网格第
  • Xcode 6 自动完成失败(<<错误类型>>)

    我正在使用 Swift 开发一个应用程序 并且在某个时候我开始遇到奇怪的 Xcode 行为 我不完全记得它是如何发生的 但自动完成功能拒绝工作 并且对于我的所有变量 类型是 gt 我尝试了这里提供的一些解决方案 但它们都不起作用 这种令人沮
  • 如何从pyspark中的数组中提取元素

    我有一个具有以下类型的数据框 col1 col2 col3 col4 xxxx yyyy zzzz 1111 2222 我希望我的输出是以下类型 col1 col2 col3 col4 col5 xxxx yyyy zzzz 1111 22
  • 在每年的每个月下划线 js 组

    这是我的输入 json data id 3 created by 1 created at 2022 01 31T07 00 01 880Z id 2 created by 1 created at 2022 01 31T07 00 01
  • IE 抛出访问被拒绝错误

    我有 2 个项目 相互连接和通信 在 2 个 tomcat 实例上运行 在我的本地 我有 2 个 tomcats 正在运行 在所有不同的浏览器上一切都很好 除了 IE 之外 它说访问被拒绝加载 Javascript 文件 所以我已经包含了一
  • Erlang 列表理解

    我正在测试一个具有两个不等式的表达式来满足列表理解的条件 有没有办法在这里进行赋值而不重复该表达式 下面的代码不起作用 但我希望它能起作用 diagnose Expertise PatientSymptoms gt CertainDisea
  • C++ const public field 与 getter 方法

    我想为某个类的每个对象添加唯一的 ID 在单个会话内 一种解决方案是使用工厂函数来增加一些静态计数器 一个更简单的解决方案是将此计数器添加到类本身 例如 class fooWithUniqueId public fooWithUniqueI
  • std::mutex 的 constexpr 构造函数是如何实现的?

    在查看 C 参考时std mutex https en cppreference com w cpp thread mutex mutex 我注意到构造函数std mutex被标记constexpr 一开始这很令人惊讶 因为我们通常必须进行
  • HTML5 Web SQL 数据库问题

    我的公司目前正在过渡到新的架构以及为移动设备提供服务的模型 我们的应用程序传统上是基于网络的 HTML5 CSS3 JS PHP MYSQL 所以我们希望能够将其移植到移动平台 而不必重新发明轮子 Cordova 以及以独立方式连接到桌面
  • 聚合物获取纸张输入值

    我使用 Polymer 很短一段时间 现在我想获取纸张输入的值 我不知道我该怎么做 这是行不通的 this form password 我想获取该字段的值
  • 当对象(例如位图)成为孤立对象时,如何处理它?

    我有一个 A 类 为其他 B C 类等提供位图 现在 A 类将其位图保存在环形队列中 因此一段时间后它将失去对该位图的引用 当它仍在队列中时 同一个位图可以由多个类检出 这样 B 和 C 都可以保存对此同一个位图的引用 但也可能发生只有其中