分享的一个检查主线程卡顿的小工具

检查主线程卡顿的方法有两个

1.通过主线程runloop添加observer,观察runloop状态变化,不难发现NSRunLoop调用方法主要就是在kCFRunLoopBeforeSources和kCFRunLoopBeforeWaiting之间,还有kCFRunLoopAfterWaiting之后,也就是如果我们发现这两个时间内耗时太长,那么就可以判定出此时主线程卡顿.

主线程卡顿监控的例子

2.通过一个异步线程不断的往主线程里执行一个操作,如果一个duration之内执行不成功,则认为主线程有卡顿,此时打印出掉用栈,或者设置断点可以看到当前出问题的地方

在同事分享后,在github上找到原始作者的demo

https://github.com/krezzoid/mainThreadPinger

 override func main() {
        while !self.cancelled {
            pingRunning = true

            dispatch_async(dispatch_get_main_queue(), {
                self.pingRunning = false
                dispatch_semaphore_signal(self.semaphore)
            })

            // check once per 400msec
            NSThread.sleepForTimeInterval(0.4)
            if pingRunning {
                print("WARNING - slow UI/main thread detected!")
            }

            dispatch_semaphore_wait(self.semaphore, DISPATCH_TIME_FOREVER)
        }
    }

  

时间: 2024-10-23 20:48:19

分享的一个检查主线程卡顿的小工具的相关文章

用cefsharp写了一个保存网页为单文件html的小工具

折腾了两天,用cefsharp写成了一个保存网页为单文件html的小工具. 主要功能嘛 就是把自己感觉有用的网页保存下来,保存为一个单独的html文件. 特点嘛就是可以在保存前做一些裁剪. 见下图: 热键F11 裁剪到选中部分(也就是只保留选中部分,其它的全删除掉), 热键F12 删除掉选中部分. 文件被自动保存到C盘下的一个目录: 如果不想要图片,可以一键把页面上的图片删除掉.如下图: 查看源文件,可以发现其中的图片都是使用base64字符串方式保存的. 工具栏上[清理]的功能是删除掉 scr

键盘--自动弹出不卡顿的小技巧

1 /** 2 * 在view已经显示的时候弹出键盘, 这样可避免切换控制器的时的小卡顿 3 */ 4 - (void)viewDidAppear:(BOOL)animated 5 { 6 [super viewDidAppear:animated]; 7 [self.searchBar becomeFirstResponder]; 8 }

一个解决跨域问题的代理小工具

[问题描述] 之前调用聚合数据的API的时候,前端不能直接请求聚合给的API,提示出现跨域问题,所以一开始就想怎么解决这个问题,一开始想用jsonp来解决,但是搞了半天仍然不行.查了原因发现要想使用jsonp还得后端支持,也就是说后端如果没有使用jsonp,前端是不管怎样都不能用. [解决] 卧槽那咋办?后面我就想,写个代理吧,反正自己的网站要使用node,于是就用node+express写了个代理服务器,把前端的请求转发给聚合数据再把结果返回再整理成jsonp格式,然后前端再用jsonp请求,

ruby利用Zip Gem写一个简单的压缩和解压的小工具

在UNIX下的我们怎么会沦落到用ruby写压缩和解压工具呢?直接上shell啊!但是请允许本猫这次可耻的用ruby来玩玩吧!其实ruby GEM中有很多压缩解压包,我选的是Zip,也许是因为名字符合KISS原则吧!不过在编写中发现Zip中的某些类没有文档中所说明的实例方法,也许在某个平台上还未实现?? 话先说到前头,这个工具如果解压有重名文件的情况会直接覆盖原文件而不会有任何提示!测试时务必注意,如果造成一些文件丢失可别怪本猫啊! 代码也考虑到多文件的情况,如果是压缩多文件则默认会单独压缩每一个

Linux——互联网搜索引擎nbtscan是一个扫描WINDOWS网络NetBIOS信息的小工具

nbtscan :2005年11月23日发布.NBTSCAN身材娇小,简单快速.但只能用于局域网,可以显示IP,主机名,用户名称和MAC地址等等... man nbtscan nbtscan 192.168.1.3/24 nbtscan 192.168.1.3-24 ntbscan -v -s 192.168.1.3/24 ntbscan -v -s 192.168.1.3-24

想让安卓app不再卡顿?看这篇文章就够了

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由likunhuang发表于云+社区专栏 实现背景 应用的使用流畅度,是衡量用户体验的重要标准之一.Android 由于机型配置和系统的不同,项目复杂App场景丰富,代码多人参与迭代历史较久,代码可能会存在很多UI线程耗时的操作,实际测试时候也会偶尔发现某些业务场景发生卡顿的现象,用户也经常反馈和投诉App使用遇到卡顿.因此,我们越来越关注和提升用户体验的流畅度问题. 已有方案 在这之前,我们将反馈的常见卡顿场景,或测试过程中常见的

iOS:性能之卡顿检测

项目地址:https://github.com/tunsuy/iOSMonitorLag 该项目主要是针对ios项目的卡顿监控的探索,结合ios的运行机制和业界的实践,将其应用于公司项目中进行试运行,查看相关效果 二. 方案一 基于RunLoop 1. 背景 因为UIKit本身的特性,需要将所有的UI操作都放在主线程执行,所以也造成不少程序员都习惯将一些线程安全性不确定的逻辑,以及其它线程结束后的汇总工作等等放到了主线,所以主线程中包含的这些大量计算.IO.绘制都有可能造成卡顿. 在Xcode中

【转】iOS实时卡顿监控

转自http://www.tanhao.me/code/151113.html/ 在移动设备上开发软件,性能一直是我们最为关心的话题之一,我们作为程序员除了需要努力提高代码质量之外,及时发现和监控软件中那些造成性能低下的”罪魁祸首”也是我们神圣的职责. 众所周知,iOS平台因为UIKit本身的特性,需要将所有的UI操作都放在主线程执行,所以也造成不少程序员都习惯将一些线程安全性不确定的逻辑,以及其它线程结束后的汇总工作等等放到了主线,所以主线程中包含的这些大量计算.IO.绘制都有可能造成卡顿.

Android子线程更新UI主线程方法之Handler

背景: 我们开发应用程序的时候,处于线程安全的原因子线程通常是不能直接更新主线程(UI线程)中的UI元素的,那么在Android开发中有几种方法解决这个问题,其中方法之一就是利用Handler处理的. 下面说下有关Handler相关的知识. 多线程一些基础知识回顾:在介绍Handler类相关知识之前,我们先看看在Java中是如何创建多线程的方法有两种:通过继承Thread类,重写Run方法来实现通过继承接口Runnable实现多线程 具体两者的区别与实现,看看这篇文章中的介绍:http://de