Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加载高分辨率图像时性能低下_C# - Fatal编程技术网

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

C# 加载高分辨率图像时性能低下,c#,C#,我开发了一个类似“AdobePhotoshop”的实用程序。用户可以画矩形,圆形,。。。使用鼠标指针,然后移动或调整其大小。对于此功能,我假设每个形状都是存储在容器对象中的常规集合中的对象。当用户想要更改任何内容时,我可以识别出他单击的位置,并在场景后面选择目标对象,依此类推。。。 当屏幕中的对象很多或用户加载高分辨率的图片时,这种方法会出现问题 你怎么看 我该如何解决它呢?问题是,在高分辨率下,计算机需要使用更多的处理器,然后出现这种情况,请记住,在Gimp中,甚至在Adobe Photosh

我开发了一个类似“AdobePhotoshop”的实用程序。用户可以画矩形,圆形,。。。使用鼠标指针,然后移动或调整其大小。对于此功能,我假设每个形状都是存储在容器对象中的常规集合中的对象。当用户想要更改任何内容时,我可以识别出他单击的位置,并在场景后面选择目标对象,依此类推。。。 当屏幕中的对象很多或用户加载高分辨率的图片时,这种方法会出现问题

你怎么看


我该如何解决它呢?

问题是,在高分辨率下,计算机需要使用更多的处理器,然后出现这种情况,请记住,在Gimp中,甚至在Adobe Photoshop中也会出现这种情况


注意。

使用dotTrace之类的探查器,找出调用最多、处理时间最长的方法。这些是您想要尝试优化的。除此之外,您可能还需要使用GPU来加快速度。

关于此类问题,请考虑并行扩展:


cpu越多,程序运行越快。

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

虽然性能问题对于解决很重要,但很多性能问题可能会被认为是线程问题,即一个线程试图处理信息,而您阻塞了UI线程,这使系统看起来像是冻结了

有很多关于StackOverflow的信息,你可能想看看

  • (因为你说你正在使用一个集合)

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

I高分辨率图像占用大量内存(更多)。因此,对它所做的任何操作都意味着要操作更多的位

您的程序是否使用“层”?

如果没有,那么我猜您是在直接向图像添加组件-这意味着每个操作都必须操作位。因此,如果您不使用层,那么您肯定应该开始。图层将允许您在屏幕上绘制操作,但仅在保存时将其合并到基本高分辨率图像中一次

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

如果您正在使用,那么您实际上正在使用,因为它是它上面的一个包装器。GDI+在很多方面都很好,因为它简化了大量的操作,但是它并不是世界上最快的。例如,使用[Get | Set]Pixel方法比直接在屏幕上工作要慢得多。由于有大量关于在GDI+上加速操作的文章,我将不再在这里重复它们


我希望我提供的信息能够回答您的一些问题,从而引发新的问题。祝你好运

Paint.NET项目是一个开源和学习这些东西的好地方。“为什么我的应用程序性能不好?”“让我数一数可能的方法…”我用对象列表实现层逻辑。请描述一下你们所说的图层。给我一个例子或链接。你们在使用系统。绘图吗?您的GUI是WinForms还是WPF?