2010-11-21 92 views
2

我在仿真器和手機上都發生了一些無法解釋的崩潰。基本上,當我的應用程序崩潰時,我無法獲得任何對話框,並且手機返回到主屏幕。什麼導致我的WP7應用程序崩潰?

我有下面的代碼顯示一個MessageBox但這在某種程度上被繞過...

// Code to execute if a navigation fails 
private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e) 
{ 
    MessageBox.Show(e.Exception.ToString()); 
} 

// Code to execute on Unhandled Exceptions 
private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) 
{ 
    MessageBox.Show(e.ExceptionObject.ToString()); 
} 

的思想發生,我認爲它可能有很多涉及到內存,因爲我的應用程序交易圖片。但我認爲這仍然會被我上面未處理的異常代碼所捕獲。任何想法,我應該如何跟蹤這一點,將不勝感激。

這發生在我身上

回答

5

留意您的內存使用情況。 OutOfMemoryException會在不調用Application_UnhandledException處理程序的情況下崩潰您的應用程序。 您可以使用某些內置方法檢查當前的內存使用情況。我的博客上講述這一段時間以前http://kodierer.blogspot.com/2010/09/windows-phone-memory-constraints.html

這裏是基本的代碼,你應該加上:

var timer = new DispatcherTimer {Interval = TimeSpan.FromSeconds(2)}; 
timer.Tick += (s, e) => 
{ 
    var memuse = (long)DeviceExtendedProperties.GetValue("ApplicationPeakMemoryUsage"); 
    var maxmem = (long)DeviceExtendedProperties.GetValue("DeviceTotalMemory"); 
    memuse /= 1024 * 1024; 
    maxmem /= 1024 * 1024; 
    MyTextBlock.Text = String.Format("Mem usage: {0}/{1} MB", memuse, maxmem); 
}; 
timer.Start(); 
+0

我試着將你的代碼添加到我的項目中,並且確定在繼續使用後發現它消耗了大量內存。崩潰時,我的應用程序使用了超過300 MB的內存。我現在正在研究如何減少內存使用量。 – 2010-11-21 22:01:01

+0

啊哈。我找到了訣竅。在處理圖像時,您必須先將其源設置爲null,然後將圖像本身設置爲null,以便通過垃圾回收拾取圖像...'LargeImage.Source = null; LargeImage = null;'再次感謝。 – 2010-11-21 22:34:48

+0

我知道這很長時間,但這引起了我的注意。是不是因爲有另一個活動圖像參考,因此設置image = null不能幫助?很難相信將Source設置爲null是必需的。 – 2011-05-24 09:38:27

5

有幾件事情:

  • 如果你在做其他事情的線程,然後在這些線程IIRC異常會導致應用程序只是終止。您可能想要將新線程代碼包裝在異常處理程序中,該異常處理程序將異常傳播到UI線程中
  • 如果您的應用程序在加載第一個頁面之前拋出了異常,那麼可能會導致應用程序死掉而沒有適當的處理程序叫
  • 如果你已經有了一個StackOverflowException,這是不能被捕獲並只會讓應用程序炸彈

你可能想添加一些調試集結只持續記錄(加載和內顯示的應用程序本身),以便更容易地確定應用程序的上一次運行在崩潰之前有多遠。

+0

我發現線程我刺激性的源在異常處理方面導致應用程序關閉。我還建議添加一個可以附加的調試對象或記錄器,以便記錄應用程序崩潰之前發生的情況。 – deanvmc 2010-11-21 19:47:49

+0

謝謝喬恩。很奇怪有多少異常沒有被未處理的異常處理程序捕獲。希望微軟能夠在某個時候解決這個問題。現在至少我知道要注意什麼。我的特殊問題似乎是由於OutOfMemoryException。 – 2010-11-21 22:06:31

0

可能您的應用被watchdoged的不響應時間過長?也許是由於大量圖像的加載時間以及此代碼在UI線程上執行。

+0

用戶界面響應直到崩潰突然發生。畢竟這似乎是一個記憶問題。 – 2010-11-21 22:03:36

+0

好吧,酷酷的,你的限制是90MB的設備與256MB RAM。除此之外,記憶是你的。 – 2010-11-21 22:20:08

1

我的應用程序以完全相同的方式崩潰。

我跟蹤它在DispatcherTimer滴答處理程序中拋出OutOfMemoryException,儘管問題也可能發生在別處。

但是,並非OutOfMemoryException總是取消您的程序。它不是。我在其他各種處理程序中嘗試過,並且它被正確捕獲。

我已經張貼a blog entry about lost exceptions here

相關問題