2

我在 GDI+ 中使用绘图线/弧线在创建的图形类 .FromImage 方法上进行了一些测试。

出于性能原因,我将其划分为多线程设置(使用多种方法进行测试:New Thread(AddressOf.. or Parallel.For... or New Task..) 我注意到这并没有提高性能。但是,如果我是用测试例程(例如:计算)替换 .Graphics.DrawPath 例程,那么使用多线程时性能会得到真正的提高(见图)这是什么原因以及如何解决?

我创建了四个设置:

  1. 在图形上绘图:4 个线程(或任务)上的 4 倍(单独的 graphics.fromimage 上的 40000 个元素)(时间:1 秒 76 毫秒)

  2. 在图形上绘图:4x(单独 graphics.fromimage 上的 40000 个元素)串行(时间:959 毫秒)

  3. 计算:4个线程(或任务)上的4x(浮点测试计算)(时间:672毫秒)

  4. 计算:4x(浮点测试计算)串行(时间:2s 189msec

4

1 回答 1

2

任何线程安全的大型库都使用锁来保护共享状态。这些锁通常会导致线程之间的争用,一个线程会陷入等待另一个线程释放锁的困境。

这是艾哈迈达定律在起作用。

于 2012-12-07T17:29:02.770 回答