2009-12-10 5 views
1

MS Word와 같은 확대/축소 가능한 폼 인터페이스가 있습니다. 폼에는 폼 전체에 배치 된 +70 개의 컨트롤 (서식있는 텍스트 상자, 체크 상자 등)이 포함됩니다.폼 캐싱 또는 폼 생성 속도 향상

문제는 양식을 생성하는 데 2.5 초가 걸린다는 점입니다. Panel.Controls.Add (Ctrl)를 사용하여 70 개의 컨트롤을 추가하는 데는 1 초 밖에 걸리지 않습니다. (호출 당 16ms).

전체 빈 양식을 캐시 할 수있는 방법이 있습니까? 아마도 스마트 한 사람이 양식을 생성하는 또 다른 방법을 알고 있습니까?

답변

3

이러한 컨트롤이 디자이너를 통해 추가 되었습니까? 아니면 코드로 수동으로 추가합니까? 후자 인 경우 컨트롤을로드하기 전에 FormSuspendLayout을 호출 한 다음로드를 완료 한 후 ResumeLayout(true)을 권하는 것이 좋습니다.

또한 양식이 표시되는 동안 이러한 컨트롤을 추가하는 경우 드로잉을 일시 중단하고 다시 시작하면 큰 도움이 될 수 있습니다. 이를 수행하는 방법에 대한 자세한 내용은 this question에 대한 대답을 참조하십시오.

편집

왜 70 RichTextBox 컨트롤을 필요합니까? 많은 것을 요구하지 않도록 양식을 재 설계하는 것을 고려 했습니까 (예 : 여러 용도로 일부 재사용). 사용자 지정 컨트롤을 조사하여 자신의 생성자에서 속도를 얻을 수 있는지 확인 했습니까?

+0

안녕하세요, Adam 모든 것이 수동으로 생성됩니다. 이미 SuspendLayout 및 SuspendDrawing (WM_SETREDRAW)을 사용하고 있습니다. –

+0

그렇다면 모든 최적화가 구성 요소 수준에 적용됩니다. 추가 성능 향상을 얻을 수있는 가능성은 거의 없습니다. –

0

많은 추적을 한 후 Custom Inherited RichTextbox의 생성자가 호출 당 7-8 밀리 초를 사용한다는 것을 발견했습니다. 제어는 70 * 8 = 560ms를 의미한다.

우리는 이미 생성 된 CustomRichTextBox를 복사하거나 복제합니까? 차이가 있니?

+0

새로운 개체를 만드는 유일한 방법은 생성자를 호출하는 것입니다 (사용되는 디자인 패턴에 관계없이 어떤 수준에서 * 무언가 *가 생성자를 호출하므로) 개체를 "복사"할 수 없습니다. –