看看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