我在 C#/Winforms 中实现了一个自定义控件,它可以执行语法突出显示和自动完成等操作。我正在使用 AutoScroll 来管理滚动,效果很好。
目前我根本没有优化(当然优化很重要,但我是最后做的;功能是我首先追求的),我正在渲染巨大的文档,每次按键都会重新解析受影响的行以使得确保语法高亮是一致的。
现在,在我的大型绘制方法中,我正在绘制每个字符串、关键字等,即使它位于剪辑区域之外。但无论文档有多大以及我有多少种关键字/突出显示的片段的组合,它仍然运行得非常快,而且内存和 CPU 开销也很少。
所以我的问题 - Graphics.Draw* 方法是否会进行任何类型的剔除?例如:如果 AutoScrollPosition 位于文档的下方并且我 Graphics.DrawString(在绘图区域之外插入一些坐标),是否正在完成任何实际工作?另请注意,我在 VM 内的 Win 7 上运行 VS,并且它仍然运行得很快。现在这并不是一个问题,但在以后优化阶段时最好记住这一点。 :D
干杯, 亚伦
根据编写使用 Graphics.Draw* 方法的游戏的个人经验,如果您在调用绘图方法之前执行自己的边界检查,您会发现速度有所提高。
尝试在屏幕外绘制东西比在屏幕上绘制东西要快,但仍然比根本不绘制东西慢得多。
我建议使用WPF代替Winform,性能更好等等。