C# 缓存表单或加速表单生成

C# 缓存表单或加速表单生成,c#,.net,forms,caching,C#,.net,Forms,Caching,我有一个可缩放的表单界面,比如MS Word。表单包含+70个控件(Richtextbox、复选框等),这些控件位于整个表单中 问题是生成表单需要2.5秒。使用panel.controls.Add(ctrl)单独添加70个控件需要1秒。(每次通话16毫秒) 有没有办法缓存整个空白表单? 也许聪明的人知道生成表单的另一种方法?这些控件是通过设计器添加的,还是在代码中手动添加的?如果是后者,我建议在加载控件之前调用表单上的SuspendLayout,然后在加载完成后调用resumeloayout(t

我有一个可缩放的表单界面,比如MS Word。表单包含+70个控件(Richtextbox、复选框等),这些控件位于整个表单中

问题是生成表单需要2.5秒。使用panel.controls.Add(ctrl)单独添加70个控件需要1秒。(每次通话16毫秒)

有没有办法缓存整个空白表单?
也许聪明的人知道生成表单的另一种方法?

这些控件是通过设计器添加的,还是在代码中手动添加的?如果是后者,我建议在加载控件之前调用
表单上的
SuspendLayout
,然后在加载完成后调用
resumeloayout(true)

此外,如果在窗体可见时添加这些控件,则挂起和恢复绘图会有很大帮助。有关如何执行此操作的更多信息,请参阅的已接受答案

编辑


为什么需要70
RichTextBox
控件?您是否考虑过重新设计表单以便不需要这么多表单(例如,将一些表单用于多种用途)?您是否调查过您的自定义控件,以查看您自己的构造函数是否可以提高速度?

经过大量跟踪,我们发现自定义继承的RichTextbox的构造函数每次调用需要7-8毫秒。 70控制意味着70*8=560毫秒


我们不能复制或克隆一个已经构建的CustomRichTextBox吗?这会有什么不同吗?

嗨,亚当,一切都是手工生成的。我们已经在使用SuspendLayout和SuspendDrawing(WM_SETREDRAW)。如果是这样,那么任何优化都将在组件级别进行。您不太可能获得任何额外的性能提升。创建新对象的唯一方法是调用构造函数(在某种程度上,不管使用的是什么设计模式,都有东西在调用构造函数),因此“复制”对象是不可能的。