gpt4 book ai didi

vb.net - 使用多线程以加快执行速度

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:44:51 25 4
gpt4 key购买 nike

大致的程序行为:我有一个 map 图像,其中包含与 RGB 索引指示的 map 相关联的数据。数据已填充到 MS Access 数据库中。我将数据库中的信息作为数组导入到我的程序中,并按照我希望程序运行的顺序对它们进行排序。

我希望程序找到与正在比较的现有像素具有不同颜色的最近像素。 (颜色存储为对象 Pixel 的字符串属性)

第一个问题: 我应该使用整数而不是字符串来表示我的颜色吗?这会使比较功能运行得更快吗?

为了找到不同颜色的最近像素,程序从现任者周围的所有 8 个相邻像素开始。如果未找到不匹配项,则它会继续到下一个“度数”,并且以这种方式,它会从现有像素盘旋而出,直到遇到不匹配项为止。找到后,不匹配的颜色将保存为现任者的属性。在我找到每个像素的不匹配后,数据被重新插入到数据库中

该程序以我编写的方式完成了我想要的,但速度非常非常慢。 24 小时后,我只完成了大约 3% 的执行。

问题二: 我的程序行为听起来是否正确?如果你必须完成这项任务,你会使用这个算法吗?

问题三: 为了更快地完成程序的执行,我使用线程是否合适?这究竟是如何工作的? (我是线程的新手,但懂一点语法)

问题四: 如果我的程序为每个像素找到 nonMatch 并在找到后立即将其插入数据库,会不会更“智能”? (我猜测这在多线程中会很好,因为当一条记录正在访问数据库(插入)时,另一条记录正在访问像素数组(程序中的共享全局变量)。

问题五: 如果线程是个好主意,我猜我会把记录分成更易于管理的 block (即四分之一),并让每个线程运行相同的功能对于他们指定的记录数?我完全接近了吗?

如果我可以澄清或提供代码示例,请告诉我,我只是认为这更像是一个概念性主题,所以不想让帖子负担过重。

最佳答案

1.) 是的,整数比较比字符串快得多。此外,他们使用更少的内存

2.) 我会以这种方式调整算法:

例如:#1:假设,对于像素 (87,23),您发现最近的非匹配度为 (88,24),度数 = 1 - 您可以立即反转关系并记录,最近的非匹配到 ( 88,24) 是 (87,23)。在 degree=1 时,您通过 1 次搜索完成了 2 个像素。

例如#2:比方说,对于像素 (17,18),您发现最近的非匹配度为 (17,20),度数 = 2。您可以立即记录,所有像素,即 (16,19)、(17,19) 和 (18,19) 上的边界在度数 = 1 时具有最近的 noMatch (17,20),并且其中之一是最接近 (17,20) 的 noMatch。在 degree=2(或更高)时,您通过 1 次搜索完成了 5 个像素。

3.) 使用线程是一把双刃剑:您可以并行搜索,但如果写入数组则需要锁定。所以这取决于您可以投入多少个 CPU 内核来解决这个问题。如果这是 3 个或更多,线程肯定会加快搜索速度。

4.) 2.) 的结果使得有必要在您的数组中将一个像素标记为“完成”,因为您可能通过 1 次搜索完成了多达 5 个像素。我建议您将它们放入队列并使用专用线程将队列写回数据库:MS Access 无法处理并发更新,因此单个数据库写入线程看起来是个好主意。

5.) 我建议您不要将数组分块:您会遇到问题,因为 block 边缘的像素在不同的 block 中具有最近的非匹配项。相反,如果您使用例如4 个线程,让它们运行 1.) 从 NW 角 E,然后 S 2.) 从 SE 角 W,然后 N 3.) 从 NE 角 S,然后 W 4. 从 SW 角 N,然后 E

关于vb.net - 使用多线程以加快执行速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9027303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com