制作 gdi 画笔和钢笔有多贵?我应该在添加需要的基础上创建它们并将它们包装在使用中以便快速处理它们,还是应该创建一个类似于 System.Drawing.Brushes 类的静态类?
Bob
问问题
1164 次
3 回答
5
IMO,它们足够高效,您通常不应该创建用于多个方法调用的长期实例,但效率低到您应该只在特定方法中创建每个实例一次,而不是每次创建一个新实例需要画一些东西。
换句话说,不要在类中存储用于在每次OnPaint
调用时绘制文本的自定义画笔,也不要为在 OnPaint 调用中绘制的每一行文本创建一个新画笔。
于 2009-01-07T18:40:36.013 回答
2
我在尝试使用静态画笔在负载下的 Web 应用程序中自定义绘制图像时遇到了异常。
我不知道技术原因,但我认为画笔和钢笔不是线程安全的,所以我会根据需要以线程安全的方式创建它们,并在该范围内处理它们,可能使用using。
于 2009-01-07T16:54:28.863 回答
2
对于我们可配置的 GUI,我们认为在绘制控件时我们会尝试将它们放在“使用”中(需要时重新创建),并认为如果需要我们会进行优化。
它不是必需的。
这是 WinCE 上的 WinForm,这通常意味着它擅长在桌面上显示可能稍微慢的东西(例如,反射在 WinCE 上感觉要昂贵得多)所以除非你在桌面上进行一些需要很多性能的疯狂图像处理,然后我认为您应该可以在需要时创建它们。
IIRC 使用画笔。GDI 中的集合可能是一种选择,因为这可以确保它们在最后被缓存和处理,尽管我不确定那里的线程安全。
于 2009-01-07T18:29:41.650 回答