2010-08-06 2 views
0

TabPage의 Visible 속성이 예상대로 작동하지 않기 때문에 실제 TabVisible 기능을 얻기 위해 향상된 TabControl/TabPage 클래스를 구현하려고합니다.TabVisible 임시 해결 방법 - 메모리 누수

저는 C#/WinForms/VS2005/.Net FW 2.0으로 작업하고 있습니다. 내가 코드 이런 식으로 구현했습니다 :

http://csharp.pastebin.com/AUnzRQLw

을 내가 표시/내가 추가 한 일부 VisibleTabPage 컨트롤을 숨길 수있는 체크 박스를 (선택 취소/확인, 테스트를 위해 양식을했습니다 HTTP ..// csharp.pastebin.com/MkGJGx2G). 그러나 임의의 순서로 클릭 횟수를 초과하면 임의의 순서로 응용 프로그램이 더 많은 메모리를 할당하기 시작하고 TabPage 컨트롤을 표시하거나 숨기려면 상당한 양의 CPU를 사용합니다.

누군가가 버그를 어디에서 지적 할 수 있습니까?

+0

확인란 상태가 변경 될 때 탭 페이지를 다시 초기화하는지 확인하는 것이 좋습니다. 이를 확인하는 가장 좋은 방법은 좋은 프로파일 러 (Windbg 등)를 다운로드하고 메모리에 어떤 객체가 있는지 확인하는 것입니다. –

+0

예, 저는 메모리 프로파일 러를 사용하여 ArrayList 객체가 범인이라는 것을 알았습니다. TabControlEx 객체의 전체 수명 동안 유지 관리하는 private ArrayList를 만들었습니다. 문제가 해결되었습니다. – Alexandre

답변

1

씨름하는 코드가 너무 많습니다. 그러나 탭 페이지에 대해 Dispose() 메서드를 호출하지 않고 Remove() 및 Clear()와 같은 메서드를 사용하는 것을 볼 수 있습니다. 이 페이지들은 "파킹"되어 시스템 자원을 계속 사용합니다. Taskmgr.exe, 프로세스 탭,보기 + 열 선택, User32 개체 틱 실행. 코드가 탭 페이지 및 모든 컨트롤에 대한 핸들을 누출함에 따라이 숫자는 바운드없이 올라갈 것입니다.

+0

버그를 발견했습니다. 많은 시간을 초기화 한 ArrayList였습니다. TabControlEx 객체의 전체 수명 동안 유지 관리하는 private ArrayList를 만들었습니다. 문제가 해결되었습니다. 어쨌든 팁을 주셔서 감사합니다. – Alexandre