ConcurrentQueue> 的用法

2023-12-29

我基本上是在寻找一个从线程中的相机获取的图像集合的容器。由于ConcurrentQueue是线程安全的,所以我想使用它。但是在调试我的代码时,我发现本文 http://blogs.msdn.com/b/pfxteam/archive/2012/05/08/concurrentqueue-lt-t-gt-holding-on-to-a-few-dequeued-elements.aspx saying

如果元素很小,您可能永远不会注意到这一点。如果, 然而,这些元素占用大量资源(例如,每个元素都是 一个巨大的图像位图),你可能会看到它的影响 (一种解决方法是将包装对象排队,例如有一个ConcurrentQueue<StrongBox<T>>而不是一个ConcurrentQueue<T>, 和 在包装器完成后,将包装器对 T 值的引用清空 已出队)。

据我所知,StrongBox是原始值的一种包装。这是否意味着我必须存储另一组图像?

所以我正在寻找用法或示例ConcurrentQueue<StrongBox<T>>.我从谷歌唯一发现的是


评论中提醒了过早优化的危险,因此我将解决这里发生的事情的语义。

正如文章指出的那样,ConcurrentQueue可以保留一些已经经历过的事情的参考。我学的是“几十个”,文章说不超过 31 个,这似乎很好地结合在一起。如果队列正在跟踪大对象,例如 2000x2000 位图,理论上这可能会成为问题。当然,这取决于程序的其余部分正在做什么。

将其包裹在一个StrongBox<T> http://msdn.microsoft.com/en-us/library/bb549038.aspx有帮助,因为唯一的事情StrongBox所做的就是保留对其他事物的引用。因此,一个StrongBox占用空间非常小,无论它包含什么,都会超出范围并且(理论上)更快地被 GC 处理。

Since StrongBox含有无糖汽水的所有成分,你有点想太多了它的用途。你实际上只是加载Value领域与一些T然后稍后再参考。它看起来有点像这样:

var boxedBitmap = new StrongBox<Bitmap>(new Bitmap(1,1));
var bitmap = boxedBitmap.Value;

或者:

var boxedBitmap = new StrongBox<Bitmap>();
boxedBitmap.Value = new Bitmap(1,1);
var bitmap = boxedBitmap.Value;

说真的,如果你在 Reflector 中打开这个类,它的实现大约只有 5 行。

在这种情况下,您的使用ConcurrentQueue<T>与使用实际上没有什么不同ConcurrentQueue<StrongBox<T>>。你只需添加.Value在将资源发送到其目标线程之前。这确实帮助我工作的公司通过简单地传递对确定性工具的引用而不是传递整个工具来减少大量多线程分析服务的内存印记,但你的里程可能会有所不同 - 我不清楚如果你传递一些东西来变异然后被其他东西使用,会产生什么后果。

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

ConcurrentQueue> 的用法 的相关文章

  • 一种链接到类、方法,尤其是 C# 注释中的特定代码行的方法

    我想使用代码中指向目标的链接来构建某种文档 目标可以是Class or a Method或特定的代码行 指向特定的代码行是最重要的 我想到了VS2010的扩展或者特定的评论标签 有什么办法可以建立这种类型的链接吗 xml注释 沙堡可能就是你
  • 从 WatchOS 捕获 Apple Watch 的型号标识符

    似乎没有任何记录的官方方法可以从手表应用程序获取 Apple Watch 模型 但有一篇文章显示了特殊用途sysctlbyname 如何确定Apple Watch型号 https stackoverflow com questions 49
  • 替换大字符串中的多个字符串的最快方法

    我正在寻找替换大 1mb 字符串的多个 500 子字符串的最快方法 无论我尝试过什么 String Replace 似乎都是最快的方法 我只关心最快的方式 不是代码的可读性 可维护性等 我不在乎是否需要使用不安全的代码或预处理原始字符串 每
  • 在 SelectSingleNode 中使用 XPath:从 XML 中检索单个元素(如果存在)

    我的 XML 看起来像
  • 共享库 C++ Makefile

    我需要编译胖二进制文件才能在另一台 Linux 机器上使用它 但缺少一些库 因此据我了解 我应该使用一些 shared 选项来编译它 但我不明白如何为此配置 Makefile 目前我的 makefile 如下所示 CC g CC FLAGS
  • main() 是用户定义函数吗? [复制]

    这个问题在这里已经有答案了 程序员does定义内部发生的事情main 毕竟 那么 它应该被视为用户定义的函数吗 C 标准没有用户定义函数的概念 相反 它有一个概念库函数 main 不是库函数 但是 该标准还对其签名提出了一些要求 并且不得重
  • 为什么要在 C 和 C++ 项目中创建 include/ 目录?

    当我处理我的个人 C 和 C 项目时 我通常把file h and file cpp在同一目录中 然后file cpp可以参考file h with a include file h 指示 然而 通常会发现库和其他类型的项目 如 linux
  • 如何重命名 MacOS/X 程序中的程序名称菜单标签?

    我有一个在 MacOS X 下运行的基于 Qt 的 GUI 程序 我希望能够更改该程序的第一个菜单标题的标签 即此屏幕截图中用红色圈出的标签 有没有一种编程方法可以做到这一点 假设不存在基于 Qt 的解决方案 则 Objective C 本
  • 编译器错误? g++ 允许可变大小的静态数组,除非函数是模板化的

    下面的代码演示了我无法解释的 gcc 4 6 2 的行为 第一个函数声明一个 vec t 类型的静态数组 其中 vec t 是 unsigned char 的 typedef 别名 第二个函数是相同的 只是 vect t 的类型是模板参数
  • C++ 中的结构填充

    如果我有一个struct在 C 中 有没有办法安全地将其读 写到跨平台 编译器兼容的文件中 因为如果我理解正确的话 每个编译器都会根据目标平台进行不同的 填充 不 那是不可能的 这是因为C 在二进制层面缺乏标准化 Don Box http
  • WCF:通用接口的序列化可能吗?

    我正在尝试实现一个服务契约 其中包含一个采用通用接口的方法 并且该通用接口本身被赋予一个接口参数 我用 ServiceKnownType 装饰了服务接口 用常规 KnownType 装饰了服务实现 并用常规 KnownType 装饰了数据契
  • 开始学习 C# 的最佳方式是什么?

    我对 vb 6 有一点编程经验 而 vb net 则不多 请告诉我成为专家 C 程序员的最佳方法 我知道这需要很长时间 想想你如何学习人类语言 阅读 写作 口语和听力 阅读代码 阅读文章 阅读示例 当您更有经验时 请查看您使用的一些项目的源
  • Linux 相当于 GetCommandLine 和 CommandLineToArgv?

    我想知道是否有一些 API 可以在 Linux 上获取当前进程的命令行参数 我想我是非常不清楚的 该问题的真正目的是通过命令行参数传递 unicode 文件名 从文件中读取 proc self cmdline 例如 wallyk zf od
  • 来自“void *”的dynamic_cast

    根据this https stackoverflow com questions 3155277 cannot dynamic cast void to templated class void 没有 RTTI 信息 因此从void 不合法
  • 如何使用 SonarQube 的 C# 插件设置 FxCop 安装路径

    我正在尝试使用 SonarQube C 插件分析 NET C 项目 从C Plugin 3 0开始 即使sonar project properties中的 sonar fxcop mode skip FxCop也会自动执行 所以我将FxC
  • Doxygen 支持 C++11 模板别名(“using”语法)吗?

    我正在使用 doxygen 1 7 1 为一些 C 11 代码生成文档 它似乎忽略了我的模板别名 为了清楚起见 下面是模板别名的示例 template
  • 使用 C# winforms 与 Windows 中的其他桌面应用程序交互

    我想知道是否可以与使用我的程序的其他程序进行交互 例如 单击另一个程序上的按钮等 我不确定这是否可能 但如果可能的话 有人可以提供一些 C 示例代码 Thanks 您可以创建消息并将其发送到其他进程 为此 您必须在 C 代码中使用 P In
  • 使用二维动态数组编写一个类

    我有一个家庭作业 我并不是在寻找任何人为我做这项工作 我只是在一个小方面遇到了麻烦 尽管我也接受其他方面的建议 任务是 使用二维动态数组编写一个类 构造函数传入数组的维度 构造函数还将动态数组中的所有值初始化为行索引乘以列索引 交换二维数组
  • 如何使用 Dictionary 属性序列化对象?

    在下面的示例代码中 我得到了这个error 元素 TestSerializeDictionary123 Customer CustomProperties 呕吐型 System Collections Generic Dictionary
  • 使用 CRTP 模式时继承中的不明确方法

    我正在定义一个DoubleWrapper类继承自两个 CRTP 基类 Ratioable and Divable 两者都定义operator 具有不同的签名 T operator double const scalar const retu

随机推荐

  • 在 ggplot 中,如何获得 stat_bin2d 的两个图例(“渐变”类型)?

    这里我有两个 簇 只有一个图例 如何获得具有两种不同颜色渐变的两个 密度 图例 我努力了group但它不起作用 以下代码生成了上图 library ggplot2 df lt data frame x c rnorm 1000 1 1 rn
  • RestKit - 发布对象并更新其属性

    我有一个使用 RestKit 和 Sinatra 支持的服务器的小应用程序 当我将用户对象发布到服务器时 服务器成功保存用户并以新创建用户的 json 表示形式进行响应 以下是在客户端创建用户的代码 User currentUser Use
  • 神经机器翻译模型预测相差一

    问题总结 在下面的示例中 我的 NMT 模型具有很高的损失 因为它正确预测target input代替target output Targetin 1 3 3 3 3 6 6 6 9 7 7 7 4 4 4 4 4 9 9 10 10 10
  • SQL Server 2008无法使用新创建的用户登录

    我正在使用 Windows Vista 但无法使用新创建的用户登录 我打开 SQL Server Management Studio 我通过右键单击 安全 gt 登录 来创建一个新的登录 检查 SQL Server 身份验证登录名 测试员密
  • Android 中的 System.out.println?

    有什么方法可以在 android studio 中查看我的打印报表而不显示时间和目录 当该文本占用如此多的空间时 它会非常分散注意力并且难以调试 在 Android Studio 的 Android Monitor 视图中 在版本 1 3
  • 何时在视图状态中保存变量?

    我在网上搜索了答案 发现大多数变量都保存在 page prerender 事件的视图状态中 然后变量的值在页面加载事件中被设置回来 但是 当我在预渲染或加载事件中将变量保存在视图状态中时 视图状态在代码隐藏中动态更改后如何存储该变量的值 假
  • 为多个类型变量定义约束

    在我的代码库中 我有几种类型 它们具有不同数量的类型变量 例如 考虑 data MyType a b c data MyOtherType a b c d e 然后我使用这些类型定义函数 并且我想要求每个类型变量都是Show 为了避免太多重
  • 单击时更改按钮中的图像

    我有一个按钮 里面有一个图像 我想在单击时交换该图像 我已经使该部分正常工作 但现在我还希望它在再次单击时变回原始图像 我正在使用的代码
  • MATLAB 中的矩阵大小限制 [重复]

    这个问题在这里已经有答案了 可能的重复 MATLAB 最大预分配大小 https stackoverflow com questions 2332430 matlab maximum pre allocated size 在 MATLAB
  • 如何同步 Django 的“客户端”和 Selenium 的 webdriver 之间使用的 html/session

    我正在尝试使用 Lettuce Selenium 和 lettuce webdriver 测试登录的用户是否可以在我的 Django 站点上注销 在我的terrain py 中我有 before all def setup browser
  • 多个mysql表列的求和、相减和连接

    我有四个 mysql 表client transaction other loan and payment 我想要得到sum of load amount and additional从表transaction sum of amount
  • 为什么不能从 Template::Type 推导出 T? [复制]

    这个问题在这里已经有答案了 这段代码有什么问题 include
  • Odoo10 - 如何执行 JavaScript

    我一定做了一些完全错误的事情 odoo define my module popups function require use strict var ajax require web ajax var core require web c
  • 如何删除mysql中第n行之后的每条记录?

    在mysql中我可以查询select LIMIT 10 30其中 10 表示要跳过的记录数 有谁知道我如何在删除语句中执行相同的操作 删除前 10 条记录之后的每条记录 考虑到没有rowId在 MySQL 中 就像在 Oracle 中一样
  • 松弛斜杠命令仅显示对通道的响应

    slack 只提供两种类型的响应 ephemeral 只向用户显示命令和响应 in channel 向频道中的所有用户显示命令和响应 短暂的例子 in channel 示例 问题 我怎样才能使斜杠命令显示响应only在频道中而不显示命令和响
  • 可以使用多个/嵌套 MySQLi 语句吗?

    是否有可能有一个MySQLi prepared statement内fetch 调用先前的语句 如果没有 最好的解决办法是什么 示例代码 if stmt link gt prepare SELECT item FROM data WHERE
  • 存储过程中非法混合排序规则

    我在 MySQL 中的存储过程失败了Mysql Error Illegal mix of collations utf8 general ci IMPLICIT and utf8 unicode ci IMPLICIT for operat
  • 在 WPF 中设置 Tab 键顺序

    如何在 WPF 中设置选项卡排序 我有一个 ItemsControl 其中一些项目已展开 有些项目已折叠 并且想在使用选项卡时跳过折叠的项目 有任何想法吗 如果您想显式设置表单中元素的制表符顺序 以下附加属性应该会有所帮助
  • 对估算数据集列表的时滞分析

    我的问题和数据与以下帖子类似 使用顺序时间滞后输出线性回归系数循环数据 https stackoverflow com questions 46266078 loop through data with sequential time la
  • ConcurrentQueue> 的用法

    我基本上是在寻找一个从线程中的相机获取的图像集合的容器 由于ConcurrentQueue是线程安全的 所以我想使用它 但是在调试我的代码时 我发现本文 http blogs msdn com b pfxteam archive 2012