背景
目前,我正在尝试修复一些行为,如果控件太大,无法分配缓冲区,则双缓冲区会导致崩溃。
经过多次讨论和反复试验,我们决定最好的操作方法是,如果大小支持它(例如小于3000x3000像素),则对控件启用双缓冲,但是如果它超过了该大小阈值,那么我们将以编程方式关闭双缓冲。
由于GetStyle和SetStyle方法是受保护的,而且有许多第三方控件需要禁用双重缓冲,因此这样做非常烦人。为了克服这个问题,我创建了一个助手方法,它通过反射禁用双缓冲,这似乎是所有邪恶中较小的一个。然后通过布局事件监视控件的大小,并相应地设置DoubleBuffer和OptimizedDoubleBuffer标志。
问题
我不太熟悉反射,我的主要问题是通过ControlStyles方法获得/设置MethodInfo.Invoke应该会产生什么样的性能影响。
特别是,我想知道是否有助于防止通过对值进行一次读取来设置DoubleBuffer/OptimizedDoubleBuffer ControlStyles (这也必须通过反射使用GetStyle() )。或者每次只调用SetStyle()基本上是一样的。我之所以担心,是因为布局事件被称为“很多”,而且我不想仅仅因为这种双缓冲跟踪逻辑而严重降低性能。
任何输入,特别是关于我正在做的工作的性能影响,但如果任何人有一个更好的想法禁用双缓冲控制时,只有超过一定的规模。
发布于 2012-06-05 21:40:58
我建议您先阅读样式,看看是否需要调用SetStyle。设置样式可能会很昂贵。
与分配双缓冲区和绘图相比,只需要少量的反射访问就可以了。别想了。
https://stackoverflow.com/questions/10905347
复制相似问题