2008-08-13 2 views
6

필자는 CF Remote Performance Monitor을 사용했지만 관리되지 않는 세계와 대조적으로 관리되는 세계에서만 초기화 된 메모리를 추적하는 것으로 보입니다. 음, 프로파일 러에 나열된 숫자가 최대 허용치 (CE 5의 32MB)에 미치지 못하기 때문에 이것을 추정 할 수 있습니다. RPM으로 특정 응용 프로그램을 프로파일 링하면 모든 캐시의 총 사용량이 약 12MB로만 관리되고 관리되지 않는 항목이 더 많은 메모리를 요구하기 시작하면서 천천히 축소됩니다. 시스템의 메모리 슬라이더는 장치의 메모리가 매우 부족함을 보여줍니다. 프로세스를 종료하면 슬라이더에 모든 메모리가 다시 표시됩니다. 따라서 메모리를 삼키는 관리 프로세스가 필요합니다 (?).Compact Framework에서 개발할 때 모든 메모리를 찾는 가장 좋은 방법은 무엇입니까?

어떤 P3/Invoke 호출과 일치시킬 수있는 방법으로 관리되지 않는 메모리 사용을 추적 할 수있는 간단한 (ish?) 유행이 있습니까?

편집 : 모든 재 태그 자에게는 .NET이 아니기 때문에 이런 질문을 태그하면 혼란 스럽습니다. .NETCF/Compact Framework입니다. 나는 그들이 유사한 것처럼 보이지만 .NET 락은 CF가 기본적으로 NotImplementedException을 감싸는 래퍼이기 때문에 서로 다르다는 것을 알고 있습니다.

+1

"CF는 기본적으로 NotImplementedException을 감싸는 래퍼입니다." 나는 그 인용문을 좋아한다! – Stormenet

답변

3

Interop logging을 사용해보십시오. 당신은 당신이 사용하는 기본 DLL의 코드에 액세스 할 수있는 경우도

,이 체크 아웃 : 나는 확실히 잠시 동안 응용 프로그램을 관리하는 C#으로 관리되지 않는 문제와 싸우고 있었어요 http://msdn.microsoft.com/en-us/netframework/bb630228.aspx

+0

나는 이것이 오래된 게시물이지만 잘하면 이걸보고 반응 할 것이라는 것을 안다. 두 번째 링크는 http://msdn.microsoft.com/en-us/vstudio/aa496123으로 이동하여 Visual Studio의 최상위 사이트로 간주됩니다. 당신이 맺어 놓은 것을 기억합니까? –

1

을 - 그건 쉬운 일이 아닙니다.

가장 유용한 것으로 밝혀진 것은 텍스트 로그 파일에 정기적으로 출력하는 것입니다. 예를 들어, 새 양식을로드 할 때마다 로깅과 함께 GlobalMemoryStatus의 출력을 매 2 분마다 인쇄 할 수 있습니다. 거기에서 적어도 기억이 점차적으로 침식되거나 하루 중 특정 시간대에 엄청난 양의 기억이 사라지는 것을 볼 수 있습니다.

우리는 장치가 사용되는 동안 하루 종일 점차적 인 메모리 손실을 발견했습니다. 거기에서 우리는 바코드 스캐닝 장치가 Form base 클래스에서 특별한 이유없이 초기화되었다는 것을 발견했습니다 (이전 개발자를 비난합니다!) :

이 로깅을 설정하는 것은 번거롭지 만 특히 실제 사용중인 기기에서 장기간에 걸쳐 막대한 배당금을 지불했습니다. 실제 데이터, 계측기, 예외로부터 스택 추적 등을 얻을 수 있습니다.

1

좋아요, C#이 아닌 CE에서 C++을 사용하고 있습니다. 도움이되었지만 ...

Windows CE에서 메모리 및 리소스 사용, 누수 및 예외를 모니터링하는 Entrk toolbox이라는 패키지를 사용합니다. 꽤 많이 boundschecker의 가벼운 CE 버전처럼. 가장 많이 트릭을합니까?