加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Monotouch应用程序中的线程数

发布时间:2020-12-15 05:41:15 所属栏目:百科 来源:网络整理
导读:我在我的应用程序中使用Task和TaskCompletionSource代码,这些代码经常被调用,例如从“滚动表视图”异步下载来自Internet的图像.这允许我编写async / await代码而不需要触及用于下载/缓存操作的UI线程. 例如.: public override Taskobject GetCachedImage (s
我在我的应用程序中使用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个线程被创建,但其中一些被销毁了,我是对的?
这是否意味着线程已完成:< Thread Pool>只要应用程序正在运行,#…消息将始终以更大的数字出现?为什么不重用线程?

解决方法

Application Output中显示的线程编号是创建的第n个线程,而不是第n个正在运行的线程.

例如:

Thread started: <Thread Pool> #123

意味着在整个应用程序的生命周期中,123个线程已经启动.它没有说明当前运行的线程数.

相反的信息:

Thread finished: <Thread Pool> #123

表示此线程现已退出.

如果你现在创建一个新线程,你会看到:

Thread started: <Thread Pool> #124

这意味着要知道当前正在运行的线程数,您可以计算“线程已启动”行数并减去“已完成线程”行数.

另一种解决方案是只查看Threads pad(就像你的截图),然后计算那里的线程数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读