看看Instruments中的Time Profiler儀器,看起來我在使用它們之後不會處理線程。 「所有線程」列表隨着我開始線程的操作而增長。如何清理MonoTouch中的線程?
我開始我的線程如下( 「線程」 是本地功能):
UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true;
Thread thread = new Thread(Dispatch);
thread.Start();
急件()函數是:
private void Dispatch()
{
using (NSAutoreleasePool autoreleasePool = new NSAutoreleasePool())
{
try
{
// Calls a web service.
_workDispatcher.Dispatch();
}
finally
{
// Resets network activity indicator after thread complete.
InvokeOnMainThread(() => { UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false; });
}
}
}
_workerDispatcher.Dispatch進行調用到網絡服務。
我還應該做些什麼來消除完成後的線程?
應用程序在經過一段時間後崩潰 - 我們猜測它可能是線程 - 因爲它經常啓動它們以執行較短的操作。我讀過MonoTouch中的監視內存使用情況,這是由於垃圾回收造成的一個挑戰 - 或者我會看到內存是否也在消耗中(例如,剩餘的線程)。
我使用的是MonoTouch 3.2.5和iOS 4.3.1(和Xcode 4中的工具)。應用程序需要在iOS 3.x上工作,因此我無法使用Grand Central Dispatch。
不,我不確定他們是我的主題。但是每當我做一個啓動線程的操作時,這個數字就會增長。我已經看到它在100(之後我停止錄製)。儀器說他們正在運行。是否有一種區分儀器中MT和應用程序線程的簡單方法? – dommer 2011-04-05 16:41:44
如果您有一個可以顯示100個正在運行的線程的測試用例,那麼他們應該退出時,請在http://monotouch.net/Support上提交一個錯誤並附上測試用例 – 2011-04-05 16:52:17
我提交了一個測試應用程序給novell支持。 – dommer 2011-04-07 08:30:32