c# – Monotouch应用程序中的线程数
我在我的应用程序中使用Task和TaskCompletionSource代码,这些代码经常被调用,例如从“滚动表视图”异步下载来自Internet的图像.这允许我编写async / await代码而不需要触及用于下载/缓存操作的UI线程.
例如.: public override Task<object> GetCachedImage (string key) { UIImage inMemoryImage = sdImageCache.ImageFromMemoryCache (key); // // Return synchronously since the image was found in the memory cache. if (inMemoryImage != null) { return Task.FromResult ((object)inMemoryImage); } TaskCompletionSource<object> tsc = new TaskCompletionSource<object> (); // // Query the disk cache asynchronously,invoking the result asynchronously. sdImageCache.QueryDiskCache (key,(image,cacheType) => { tsc.TrySetResult (image); }); return tsc.Task; } GetCachedImage被多次调用,因为表视图可能有许多要下载的图像,用户也可以滚动表视图. 线程完成:<线程池> #149 线程数总是变得越来越大,我担心我的应用程序创建了太多的线程,并且可能因为长时间使用后被卡住了. Thread完成了什么:< Thread Pool> #149意味着什么?线程是否被创建和销毁?线程是否被重用?我的应用程序有#149个活动线程吗?可以(应该)我限制最大线程数吗? 编辑 正如@usr所建议的,我再次运行我的应用程序并停止调试器以查看有多少线程,请参见屏幕截图: 看起来有38个线程被创建,但其中一些被销毁了,我是对的? 解决方法
Application Output中显示的线程编号是创建的第n个线程,而不是第n个正在运行的线程.
例如: Thread started: <Thread Pool> #123 意味着在整个应用程序的生命周期中,123个线程已经启动.它没有说明当前运行的线程数. 相反的信息: Thread finished: <Thread Pool> #123 表示此线程现已退出. 如果你现在创建一个新线程,你会看到: Thread started: <Thread Pool> #124 这意味着要知道当前正在运行的线程数,您可以计算“线程已启动”行数并减去“已完成线程”行数. 另一种解决方案是只查看Threads pad(就像你的截图),然后计算那里的线程数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |