【问题标题】:multithreading on graphics GDI+图形 GDI+ 上的多线程
【发布时间】:2012-12-08 01:29:02
【问题描述】:

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

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

我创建了四个设置:

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

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

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

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

【问题讨论】:

    标签: .net multithreading graphics


    【解决方案1】:

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

    这是Ahmdal's Law 在工作。

    【讨论】:

    • 我了解关于设置 3&4 的艾哈迈达定律,但关于设置 1&2 有没有办法解决?
    • 你搞错了。不,您不能更改 GDI+ 中的锁定代码。
    • 所以绘图总是通过gpu进行,即使是位图?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 2014-04-27
    • 2011-12-20
    • 2012-12-08
    • 2010-09-08
    • 2017-05-28
    • 1970-01-01
    相关资源
    最近更新 更多