2011-03-12 3 views
3

내 MonoTouch 앱이 계속 충돌하며 어떻게 해야할지 잘 모릅니다. 이 시점에서 나는 모든 것을 시도한 것처럼 느낍니다. 나는 끝없는 수의 vewcontrollers로 전환하는 RootViewController를 가지고있다. trasnition이 발생할 때마다 수동으로 이전 ViewController를 처리하고 새 ViewController를 표시합니다.Monotouch Application StackTrace 또는 로그가없는 충돌 (소멸자가 호출되지 않음)

응용 프로그램이 약 20-40 개의 ViewController를 충돌 시키므로 분명히 손이 느려집니다.

  1. 장치에서 내 MonoTouch 응용 프로그램의 메모리 사용을 어떻게 볼 수 있습니까? (시뮬레이터에서 충돌하지 않음)

  2. 더 이상 진단 방법으로 충돌하는 이유를 알아낼 수 있습니까?

어떤 도움 감사하겠습니다.

업데이트 VC에 다음을 추가했습니다.

~TargetPromptController(){ 
    Console.WriteLine("TargetPromptController Released from memory!"); 
} 

그리고 그것은 결코 호출되지됩니다.

답변

0

C# GC 클래스는 사용중인 총 메모리 양을 알려주지 만 매우 정확하지 않고 대부분 잘못되었습니다. 그러나 메모리 사용량이 증가하거나 감소하거나 안정적인지 여부를 알려줄 수 있습니다. 일반적으로 나는 GC.Collect를 할 때 더 많은 문제점을 겪었습니다. 그래서 제 제안은 그 방법을 사용하지 않는 것입니다.

here에 설명 된 기술을 사용하여 장치에서 디버깅 할 수 있습니다. 그러나, 나는 그것에 문제가 있었고 장치 디버깅에 문제가 생기면 Monotouch에 연락하는 것이 좋습니다.

Dispose 호출에도 불구하고 Monotouch가 ViewController를 메모리에 유지하고있는 것이 문제입니다. List 유형의 속성을 만들고 여기에 VC를 유지하십시오. MonoTouch가 사용하지 않는 VC를 쉽게 찾고 수집 할 수 있습니다. 또한 컬렉션에서 해제하기 전에 VC 내용을 가능한 많이 제거하십시오. Monotouch가 부모 객체의 자식 객체에 대한 참조를 유지하는 것을 보았습니다.

전체적으로 Monotouch는 성숙한 제품이 아니므로 지원 팀에 문의하는 데 익숙해 져야합니다. 으로 보내주십시오. 여기에 해결책을 게시하면 우리 모두가 배울 수 있습니다! :)

1

불필요한 개체는 반드시 처리해야합니다. 비록 모노 터치가 당신을 위해 이것을 할지라도, 나는 이것을 코드에서 더 잘 수행한다. 코드가 많은 일회용 객체를 생성하는 루프에서 광범위한 루틴 동안 GC를 강제 실행하십시오. 추신 나는 Monotouch를 미성숙이라고 부르지 않을 것이다. 플랫폼이 흔들린다!

관련 문제