我在GDI+中进行了一些测试,在图形类已创建。FromImage方法。
出于性能原因,我将其划分为多线程设置(使用几种方法进行测试:New Thread(AddressOf..或Parallel.For…或New Task..)我注意到这并没有提高性能。但是,如果我用测试例程(例如:计算)代替.Graphics.DrawPath例程,那么在使用多线程时,性能确实有所提高(见图)造成这种情况的原因是什么?如何解决?
我创建了四个设置:
-
在图形上绘制:4个线程(或任务)上的4x(独立图形上的40000个元素.fromimage)(时间:1s 76毫秒)
-
在图形上绘制:4x(独立图形上的40000个元素.fromimage)串行(时间:959毫秒)
-
计算:4个线程(或任务)上的4x(浮点测试计算)(时间:672毫秒)
-
计算:4x(浮点测试计算)串行(时间:2s 189毫秒
任何线程安全的大型库都使用锁来保护共享状态。这些锁通常会导致线程之间的争用,一个线程将陷入困境,等待另一个线程释放锁。
这就是艾哈迈德定律。