加载高分辨率图像时性能低下

时间:2009-10-12 13:48:30

标签: c#

我开发了一个行为类似于“Adobe photoshop”的实用程序。用户可以使用鼠标指针绘制矩形,圆形,...然后移动或调整大小。对于此功能,我假设每个形状都是存储在容器对象中的泛型集合中的对象。当用户想要改变任何东西我认识到他点击的地方和幕后的东西我选择了目标物体等等...... 当屏幕中的对象很多或用户加载高分辨率的图片时,这种方式会出现问题。

你有什么看法?

我该如何解决?

6 个答案:

答案 0 :(得分:1)

这是有道理的,因为数据集越大,处理它所需的RAM和CPU就越多。

虽然性能问题很重要,但很多可能是性能问题,因此类似于线程问题 - 你有一个线程试图处理信息,你阻止UI线程使它看起来像系统是冻结。

您可能希望查看有关StackOverflow的大量信息

答案 1 :(得分:0)

问题在于,在高分辨率下,计算机需要使用更多的处理器,然后就会发生这种情况,请记住这也发生在The Gimp中,即使在Adobe Photoshop中也是如此。

问候。

答案 2 :(得分:0)

使用像dotTrace这样的探查器,找出最常被调用的方法和花费最多时间处理的方法。那些是你想要尝试优化的。除此之外,你可能不得不下载到GPU以试图加快速度。

答案 3 :(得分:0)

关于这类问题,请考虑并行扩展: http://msdn.microsoft.com/en-us/concurrency/default.aspx

你的cpu越多,你的程序运行得越快。

答案 4 :(得分:0)

使用性能分析工具(例如ANTS Profiler)来帮助您精确查明瓶颈发生的位置。高分辨率照片上的真实图形计算需要大量资源,但我认为您用来管理和查找对象的逻辑也需要进行一些调整。

答案 5 :(得分:0)

我的高分辨率图像占用了大量内存(更多bits-per-pixel)。因此,您对它执行的任何操作都意味着需要处理更多位。

您的计划是否使用“图层”?

如果没有,那么我猜你是直接向图像添加组件 - 这意味着每个操作都必须操作这些位。所以如果你不使用图层,那么你一定要开始。图层将允许您在屏幕上绘制操作,但只将它们合并到基本的高分辨率图像中 - 当您保存时!

您使用Windows中的哪个库来打开图像?

如果您使用的是System.Drawing,那么您实际上正在使用GDI+,因为它是一个封装器。 GDI +很适合很多东西,因为它简化了大量的操作,但它并不是世界上最快的。例如,使用[Get | Set] Pixel方法比直接在BitmapData上工作要慢很多。由于有大量关于在GDI +之上加速操作的文章,我不会在这里重复它们。

我希望我提供的信息可以解答您的一些问题。祝你好运!