我有一个数组,它是文件夹中的文件列表,我正在处理文件并重命名它们。重命名它们大约需要15分钟,这是每天完成的。我目前有1个Backgroundworker来处理这个并更新UI。
我的问题是:我如何使用超过1个Backgroundworker来使用超过25%的CPU来执行此操作?
将阵列拆分为3个部分并调用3个独立的工作人员来完成他们的工作?
答案 0 :(得分:3)
如果你使用的是.NET 4.0,那么你可以使用Parallel Extensions来实现这一点 - 你只需要调用
Parallel.ForEach(files, file =>
{
// Call file processor here
});
请注意,如果您的任务受到大量IO限制,使用多个线程可能会降低速度,而不是加快速度。
答案 1 :(得分:1)
您可以创建一个在构造函数中接受文件夹路径的工作类。此worker类负责重命名初始化文件夹的上下文中的所有文件。该类可以有一个DoWork()方法,您可以在其中进行所有重命名工作。这将允许您为每个文件夹创建1个工作类,然后在单独的线程上启动每个工作类,从而根据需要拆分工作。将线程优先级设置得更高将为您提供更多的CPU时间。
System.Threading命名空间包含您需要的内容。
public class worker
{
private string _folderPath = string.Empty;
public worker(string folderPath)
{
_folderPath = folderPath
}
public void DoWork()
{
//work happens here
}
}
worker fileWorker = new worker("path to file folder");
Thread newThread = new Thread(fileWorker.DoWork);
newThred.Start();
享受!
答案 2 :(得分:0)
如果处理每个项目的时间变化很小,那么拆分数组并给每个工人一个部分可能没问题。但是,您可能会发现将列表集中保存并让每个工作人员说“给我一些工作要做”,这应该确保更均匀地共享工作。它也适用于更多变量的工人,工人可以在系统资源允许的情况下来来往往。