2016-08-24 5 views
0

저는 Compact Framework 2 및 vb.net 코드를 실행하는 Windows 모바일 응용 프로그램을 사용하고 있습니다. 결정된 시간마다 응용 프로그램을 동기화해야하므로 system.threading.timer를 사용하여 각 동기화 프로세스에 대해 미리 정의 된 타이머를 설정합니다.컴팩트 프레임 워크 2.0에서 메모리 누수 디버깅

문제는 하나입니다. 내 메모리가 빠르게 구축되어 24MB에 도달하고 OutOfMemoryException으로 인해 응용 프로그램이 손상됩니다.

콤팩트 프레임 워크의 GC가 좋지 않아서 gc 힙이 2MB 밖에 안되며 각 동기화마다 4MB를 사용하고 gc는 2MB 만 정리합니다.

컴팩트 프레임 워크 2.0에서 빌드 된 성능 모니터 도구를 사용하려고했지만 "아직 살아있다"는 개체 만 제공하고 각 부분에서 무슨 일이 벌어지고 있는지에 대한 실질적인 개념이 없도록 정리되거나 처리되지 않았습니다. 앱.

Compact Framework 2.0에서 메모리 누수를 모니터링하는 효율적인 방법이 있습니까? 어떤 방법으로 문제를 일으키고 어떤 코드 부분에 문제가 있는지 안내해주는 사람이 있습니까?

다른 방법으로는 32MB의 여유 공간이있는 효율적인 방법으로 내 메모리를 관리하는 데 도움이되는 방법입니다. 여기에는 매우 좁은 공간이 있습니다.

+0

내 관점에서 볼 때 메모리 누수는 개체를 할당 할 때 사용 후 삭제 (폐기 및 Null로 설정)하지 않는 경우입니다. 의심되는 각 기능의 전후에 메모리 상태를 덤프합니다. 그런 다음 메모리를 해제하지 않고 해제되지 않은 객체를 찾습니다. 해당 객체에 대한 참조가 프로세스에 존재하는 한 객체는 자동으로 삭제되지 않습니다. – josef

+0

은 [Compact Framework Power Toys] (https://www.microsoft.com/en-us/download/details.aspx?id=13442)의 NETCF CLR 프로파일 러에서 각 개체의 수를 보여줍니다 생성되는 방법과 개체를 만드는 방법은 무엇입니까? – bit2know

답변

1

이 문제는 실제 메모리 누수와 관련이 있다는 점에 회의적입니다.

장치를 연결하고 디버깅 세션을 시작하고 Visual Studio에서 스택 추적 & 스레드 수 드롭 다운의 스레드 수를 모니터링하십시오. 나는 오래된 것들을 버리지 않고 너무 많은 쓰레드를 회전시키고 있거나 스택 추적을 너무 커지게하는 함수 나 서브 루틴에 대한 순환 호출을 가지고 있다고 생각한다 - 당신은 메모리가 부족한 작은 디바이스를 찾기 전에 그것을 얻는다. 스택 오버 플로우.

0

우리는 애플리케이션 용으로 만든 내부 데이터베이스를 사용하여 XML 파일을 다루는 300 개 이상의 클라이언트가 있으므로 XML 문서에서만 작업하는 것이 현명하지 않다는 결론을 얻었습니다. 우리는 사용하는 플랫폼을 고려할 때 터무니없는 19,000 개의 행을 XML 파일로 파싱해야만했습니다. 사용하는 공간이 24MB 밖에되지 않습니다.

우리는 내부 응용 프로그램 비즈니스 및 DAL 논리를 처리 할 내부 DB를 만들었습니다.

이렇게하면 XML 파일을 다룰 필요가 없어 성능 문제를 해결할 수 있습니다.