我用一个线程运行它。
class Program
{
static void Main(string[] args)
{
Thread thread = new Thread(x => beginAnalysis("C:\\Images\\1"));
thread.Start();
}
public static void beginAnalysis(string folderPath)
{
Stopwatch sw = new Stopwatch();
sw.Start();
var imagesPath = Directory.GetFiles(folderPath, "*.jpg", SearchOption.AllDirectories);
var sealSaver = new ImageProcessingLib.SealSaver();
foreach (string imagePath in imagesPath)
{
sealSaver.SealSaver(imagePath);
}
sw.Stop();
Console.WriteLine("Total time: {0}",sw.Elapsed.ToString());Console.ReadKey();
}
}
时间的结果是
总时间:00:00:09.0007113
但是当我运行四个线程时,时间是非常不同的
class Program
{
static void Main(string[] args)
{
Thread thread = new Thread(x => beginAnalysis("C:\\Images\\1"));
thread.Start();
Thread thread2 = new Thread(x => beginAnalysis("C:\\Images\\2"));
thread2.Start();
Thread thread3 = new Thread(x => beginAnalysis("C:\\Images\\3"));
thread3.Start();
Thread thread4 = new Thread(x => beginAnalysis("C:\\Images\\4"));
thread4.Start();
}
public static void beginAnalysis(string folderPath)
{
Stopwatch sw = new Stopwatch();
sw.Start();
var imagesPath = Directory.GetFiles(folderPath, "*.jpg", SearchOption.AllDirectories);
var sealSaver = new ImageProcessingLib.SealSaver();
foreach (string imagePath in imagesPath)
{
sealSaver.SealSaver(imagePath);
}
sw.Stop();
Console.WriteLine("Total time: {0}",sw.Elapsed.ToString());Console.ReadKey();
}
}
时间的结果是
Total time: 00:00:12.0002174
Total time: 00:00:11.0006616
Total time: 00:00:12.0011639
Total time: 00:00:13.0006828
如果时间是同一个文件夹,为什么时间会改变?
这些是我的电脑的特点:
操作系统:Windows 8.1 Pro - 64位
RAM:6 GB
处理器:Intel i5-34170 3.20 Ghz核心 - 4
缓存L1 256KB - L2 1.0 MB - L3 6.0 MB
我使用framework 4.0和visual studio 2010进行开发
图书馆" ImageProcessingLib"不使用共享资源。
如果时间是同一个文件夹,为什么时间会改变?
答案 0 :(得分:1)
有很多原因导致您的代码在MT环境中运行得更慢:
出于性能原因运行代码多线程(与运行代码多线程相反,因为您希望UI始终响应)只有在没有共同的阻塞点并且操作完全独立时才有意义。在您的示例中并非如此,因为IO是瓶颈,并且无法在普通计算机上高效并行化,因为您正在处理磁盘延迟。有一些方法可以改善延迟(更快的磁盘或SSD),但您仍然在处理基本上串行的操作。