如何使用BlockingCollection图像缓存

本文关键字:缓存 图像 BlockingCollection 何使用 | 更新日期: 2023-09-27 17:54:25

我希望有人能帮助我一个编程解决方案。我现在有一台机器,可以获取传送带上物品的位图图像。大约每5秒从相机获取一幅图像。我需要存储(缓存在内存中)最近的4个图像左右。几乎就像一个堆栈,每次获得一个新的图像时,我需要它在堆栈的顶部,它把其他的向下推,这样最后一个(最老的)图像就会掉下来。我正在考虑使用一个集合来存储这些位图。当我添加位图时,我也会添加唯一的"键"来标识图像。由于需要在这台机器上并发运行,我正在考虑使用BlockingCollection,这样它们就可以使用生产者-消费者方法在自己的线程上运行(从我的研究来看)。但是,我没有这方面的经验,也不知道如何开始。

在这些图像被拍摄并缓存到我的集合之后,该项目沿着传送带移动了一点,然后用不同的相机拍摄同一部件的另一张图像。对第二个图像执行检查,如果确定为"失败",我需要将第二个图像保存到磁盘上,并保存相同部分的前一个图像(来自第一个相机)。这就是为什么我需要缓存它们并能够检索它们。

注意:相机不是紧挨着的,因此第二张图像是在第一张图像之后立即获得的。在到达第二个相机之前,可能会有多达2到3个零件经过第一个相机(因为它们在中间经历了一个过程)。

我的想法是1).在我的GUI线程中,我想创建一个集合类的实例来存储位图图像以及它们的唯一键。当一个项被添加到集合中时,add方法将确定集合计数并自动删除最老的项。

2)。在某些情况下(如上所述的第二个相机"失败"),我需要从集合中检查/抓取图像。我想使用TryTake方法,以便它将从集合中获得位图(基于我提供的键)。我不希望从集合中抓取图像会干扰在同一时刻添加图像的可能性。

3)。最后,从集合中获得映像后,需要将该映像与第二个映像一起保存到磁盘上。我希望保存进程在自己的线程上运行,这样它就不会影响性能或应用程序在保存过程中需要使用集合的能力。

我不知道如何开始,除了使一个类称为cImageCache,并为唯一的键添加属性。任何编码的例子/帮助在c#或VB。NET将非常感激!非常感谢您的宝贵时间。

最贴心的问候

如何使用BlockingCollection图像缓存

我建议使用ObjectCache。为物品找一把钥匙,并把它储存起来。您可以将其设置为在一定时间后从缓存中删除。