- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我基本上是在寻找一个线程中从相机获取的图像集合的容器。由于 ConcurrentQueue 是线程安全的,所以我想使用它。但是在调试我的代码时,我发现了 this article说
If the elements are small, you’ll probably never notice this. If, however, the elements hold on to large resources (e.g. each element is a huge image bitmap), it’s possible you could see the impact of this (one workaround is to queue a wrapper object, e.g. have a
ConcurrentQueue<StrongBox<T>>
rather than aConcurrentQueue<T>
, and null out the wrapper’s reference to the T value after the wrapper has been dequeued).
据我所知,StrongBox
是一种原始值的包装器。这是否意味着我必须存储另一个图像集合?
所以我正在寻找 ConcurrentQueue<StrongBox<T>>.
的用法或示例我从谷歌上找到的唯一东西是 this code.
最佳答案
过早优化的危险提醒在评论中,所以我将解决这里发生的事情的语义。
正如文章所指出的,ConcurrentQueue
可以坚持一些已经经历过的事情的引用。我把它学成“几十”,文章说它不超过 31,这似乎很好地融合了。如果队列跟踪大对象,如 2000x2000 位图,理论上会成为问题。当然,这取决于程序的其余部分在做什么。
将其包装在 StrongBox<T>
中有帮助,因为唯一的事情 StrongBox
所做的是坚持对其他事物的引用。因此,StrongBox
占地面积非常小,无论它持有什么都会超出范围并且(理论上)更快地获得 GC。
自 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
在将资源发送到其目标线程之前。这确实帮助我工作的一家公司通过简单地传递对确定性工具的引用而不是传递整个工具来减少大量多线程分析服务的内存印记,但你的里程可能会有所不同 - 我不清楚如果你传递一些东西来改变然后被其他东西使用,它会产生什么后果。
关于c# - ConcurrentQueue<StrongBox<T>> 的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13612098/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
我有实体: @Entity @Table(name = "CARDS") public class Card { @ManyToOne @JoinColumn(name = "PERSON_I
我正在尝试计算二维多边形的表面法线。我正在使用 OpenGL wiki 中的 Newell 方法来计算表面法线。 https://www.opengl.org/wiki/Calculating_a_S
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 7 年前。 Improve
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我这里有以下 XML: Visa, Mastercard, , , , 0, Discover, American Express siteonly, Buyer Pay
即将发生的 Google 政策变更迫使我们实现一个对话框,以通知欧盟用户有关 Cookie/设备标识符用于广告和分析的情况。我只想向欧盟用户显示此对话框。我不想使用额外的权限(例如 android.p
本文分享自华为云社区《华为大咖说 | 企业应用AI大模型的“道、法、术” ——道:认知篇》,作者:华为云PaaS服务小智。 本期核心观点 上车:AGI是未来5~10年内,每个人都无法回避的技
我有一个与酒精相关的网站,需要先验证年龄,然后才能让他们进入该网站。我使用 HttpModule 来执行此操作,该模块检查 cookie,如果未设置,我会将它们重定向到验证页面。我验证他们的年龄并存储
在欧盟,我们有一项法律,要求网页请求存储 cookie 的许可。我们大多数人都了解 cookie 并同意它们,但仍然被迫在任何地方明确接受它们。所以我计划编写这个附加组件(ff & chrome),它
以下在 C 和/或 C++ 中是否合法? void fn(); inline void fn() { /*Do something here*/ } 让我担心的是,第一个声明看起来暗示函数将被定义
我是一名优秀的程序员,十分优秀!