使用反射设置控件样式时的效率

时间:2012-06-05 21:37:13

标签: c# reflection double-buffering

背景

我目前正在尝试修复一些行为,如果控件太大而无法分配缓冲区,Double Buffering会导致崩溃。

经过大量讨论和反复试验后,我们认为最好的做法是如果尺寸支持它(例如小于3000x3000像素),则为控件启用双缓冲,但是如果超过该尺寸阈值,然后我们将以编程方式关闭双缓冲。

事实证明这很烦人,因为GetStyle和SetStyle方法受到保护,并且我们需要许多第三方控件来禁用双缓冲。为了克服这个问题,我创建了一个辅助方法,通过反射禁用双缓冲,这似乎是所有邪恶中较小的一个。然后我通过Layout事件监视控件的大小,并相应地设置DoubleBuffer和OptimizedDoubleBuffer标志。

问题

我对反射并不太熟悉,我的主要问题是我应该通过MethodInfo.Invoke方法获得/设置ControlStyles会对性能产生什么样的影响。

特别是,我想知道通过首先读取值来设置DoubleBuffer / OptimizedDoubleBuffer ControlStyles是否有任何帮助(这也必须通过反射使用GetStyle()来完成)。或者每次调用SetStyle()基本相同。我很担心,因为布局事件被调用很多,我不想仅仅因为这个双缓冲跟踪逻辑而严重降低性能。

任何输入都会受到赞赏,特别是关于我正在做的事情的性能影响,但是如果有人有更好的想法,只有当超过一定大小时才禁用控件的双缓冲。

1 个答案:

答案 0 :(得分:1)

我建议您先阅读样式,看看是否需要调用SetStyle。设置风格可能很昂贵。

与分配双缓冲区和绘图相比,少量的反射访问实际上并不算什么。不要考虑它。