图形.绘制*、自动滚动和剔除

问题描述 投票:0回答:2

我在 C#/Winforms 中实现了一个自定义控件,它可以执行语法突出显示和自动完成等操作。我正在使用 AutoScroll 来管理滚动,效果很好。

目前我根本没有优化(当然优化很重要,但我是最后做的;功能是我首先追求的),我正在渲染巨大的文档,每次按键都会重新解析受影响的行以使得确保语法高亮是一致的。

现在,在我的大型绘制方法中,我正在绘制每个字符串、关键字等,即使它位于剪辑区域之外。但无论文档有多大以及我有多少种关键字/突出显示的片段的组合,它仍然运行得非常快,而且内存和 CPU 开销也很少。

所以我的问题 - Graphics.Draw* 方法是否会进行任何类型的剔除?例如:如果 AutoScrollPosition 位于文档的下方并且我 Graphics.DrawString(在绘图区域之外插入一些坐标),是否正在完成任何实际工作?另请注意,我在 VM 内的 Win 7 上运行 VS,并且它仍然运行得很快。现在这并不是一个问题,但在以后优化阶段时最好记住这一点。 :D

干杯, 亚伦

c# winforms graphics autoscroll onpaint
2个回答
1
投票

根据编写使用 Graphics.Draw* 方法的游戏的个人经验,如果您在调用绘图方法之前执行自己的边界检查,您会发现速度有所提高。

尝试在屏幕外绘制东西比在屏幕上绘制东西要快,但仍然比根本不绘制东西慢得多。


0
投票

我建议使用WPF代替Winform,性能更好等等。

© www.soinside.com 2019 - 2024. All rights reserved.