[英]iOS app launch time measurement
如何計算從用戶按下主屏幕上的啟動按鈕到應用程序處於活動狀態(例如,直到第一個視圖控制器的 viewDidAppear 方法)所花費的時間?
Id 不需要以編程方式,但必須是可靠的。
類似地,在 Android 中,logcat 可以用於此效果。
如圖所示,您可以在 Xcode 上編輯方案並添加環境變量 (DYLD_PRINT_STATISTICS = 1)
當您運行應用程序時,詳細信息將打印在調試器輸出中,如下所示:
Total pre-main time: 481.88 milliseconds (100.0%)
dylib loading time: 71.70 milliseconds (14.8%)
rebase/binding time: 53.66 milliseconds (11.1%)
ObjC setup time: 40.04 milliseconds (8.3%)
initializer time: 316.33 milliseconds (65.6%)
slowest intializers :
libSystem.B.dylib : 16.71 milliseconds (3.4%)
請觀看視頻了解更多詳情。
有可能使用 C api 獲取進程開始時間:
#import <sys/sysctl.h>
static CFTimeInterval processStartTime() {
size_t len = 4;
int mib[len];
struct kinfo_proc kp;
sysctlnametomib("kern.proc.pid", mib, &len);
mib[3] = getpid();
len = sizeof(kp);
sysctl(mib, 4, &kp, &len, NULL, 0);
struct timeval startTime = kp.kp_proc.p_un.__p_starttime;
return startTime.tv_sec + startTime.tv_usec / 1e6;
}
很快你就會有這樣的事情:
private static func processStartTime() -> TimeInterval {
var kinfo = kinfo_proc()
var size = MemoryLayout<kinfo_proc>.stride
var mib: [Int32] = [CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid()]
sysctl(&mib, u_int(mib.count), &kinfo, &size, nil, 0)
let startTime = kinfo.kp_proc.p_starttime
return TimeInterval(startTime.tv_sec) + TimeInterval(startTime.tv_usec) / 1e6
}
之后,您可以使用不同的方式計算啟動時間。
例如我這樣做:
let currentTime = CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970
let startupTime = currentTime - processStartTime()
關於我在這里找到的完整帖子
一個簡單的實現是在應用程序 main 中啟動一個StopWatch
,然后在ViewDidAppear
方法中獲取時間結果:
public class Application
{
public static Stopwatch StartUpTimer;
static void Main(string[] args)
{
StartUpTimer = new Stopwatch();
StartUpTimer.Start();
UIApplication.Main(args, null, "AppDelegate");
}
}
public class MyUIViewController : UIViewController
{
public override void ViewDidAppear (bool animated)
{
Console.WriteLine (Application.StartUpTimer.ElapsedMilliseconds.ToString () + "ms to startup");
base.ViewDidAppear (animated);
}
}
在willFinishLaunchingWithOptions
中啟動一個計時器.....
停止applicationDidBecomeActive
中的計時器,或您嘗試分析的 VC 的viewDidAppear
,然后 NSLog 它。
由於您無法獲得用戶在主屏幕上觸摸應用程序圖標的確切時間,因此我建議您從另一個應用程序啟動您的應用程序,這樣您就可以獲得應用程序啟動的確切時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.