gpt4 book ai didi

c# - C#中的并行编程

转载 作者:可可西里 更新时间:2023-11-01 08:10:47 24 4
gpt4 key购买 nike

我对学习 C#.NET 中的并行编程很感兴趣(不是什么都知道,而是基础知识和一些好的实践),因此我决定重新编写我的一个旧程序,它是称为 ImageSyncer。 ImageSyncer 是一个非常简单的程序,它所做的就是扫描一个文件夹并找到所有以 .jpg 结尾的文件,然后它根据它们的拍摄日期计算文件的新位置(解析 xif 数据,或其他任何内容)它被称为)。生成位置后,程序会检查该位置是否存在任何现有文件,如果存在,它会查看要复制的文件和“以其方式”文件的最后写入时间。如果它们相等,则跳过该文件。如果不是,则创建并匹配两个文件的 md5 校验和。如果没有匹配项,则为要复制的文件指定要复制到的新位置(例如,如果要将其复制到“C:\test.jpg”,则会复制到“C:\test(1)”。 jpg”代替)。此操作的结果被填充到一个结构类型的队列中,该队列包含两个字符串,即原始文件和将其复制到的位置。然后迭代该队列直到它为空并复制文件。

换句话说,有4个操作:

1. Scan directory for jpegs  
2. Parse files for xif and generate copy-location
3. Check for file existence and if needed generate new path
4. Copy files

所以我想重写这个程序,使其并行并能够同时执行多个操作,我想知道实现该目标的最佳方法是什么。我想出了两种我能想到的不同模型,但它们都可能一点用处都没有。第一个是并行化旧程序的 4 个步骤,这样当要执行步骤 1 时,它在多个线程上完成,当整个步骤 1 完成时,步骤 2 开始。另一个(我发现它更有趣,因为我不知道该怎么做)是创建一种工作人员和消费者模型,所以当一个线程完成第 1 步时,另一个线程接管并执行第 2 步对象(或类似的东西)。但如前所述,我不知道这些是否是好的解决方案。另外,我根本不了解并行编程。我知道如何创建一个线程,以及如何让它执行一个将对象作为唯一参数的函数,而且我也曾经使用过 BackgroundWorker 类,但我对它们中的任何一个都不熟悉.

如有任何意见,我们将不胜感激。

最佳答案

有几个选项:

[但正如@John Knoeller 指出的那样,您给出的示例很可能是顺序 I/O 绑定(bind)的]

关于c# - C#中的并行编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2263803/

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