Dai*_*jan 2 xcode core-data objective-c instruments
我们在某些线程中使用coredata ...(太多的并发上下文都很糟糕 - 我知道,我经历过它)
现在围绕每个获取/保存coredata包装锁.
我现在想测量一个线程等待获取锁定所花费的时间.
我以为我可以使用时间分析器甚至是线程状态仪器或采样器.但是: - 时间分析器只是忽略等待(可能是因为它不是CPU调用) - 采样器(即使他不是cpu模式) - 线程状态仪器也没有显示我正确的callstack :( [但也许(并且这总是一个)可能)我忽略了一个简单的解决方案]
在这里我有一个非常简单的应用程序,也有一个锁,我也没有得到等待时间...也许你可以帮助我得到主线程在这个例子中等待的时间 - 使用一些分析技术我可以然后转移到coredata案例:
@implementation DDAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSLock *l = [[NSLock alloc] init];
NSLog(@"made");
[NSThread detachNewThreadSelector:@selector(hogTheLog:) toTarget:self withObject:l];
NSLog(@"wait");
[l lock];
NSLog(@"got");
[l unlock];
NSLog(@"terminate");
[NSApp terminate:nil];
}
- (void)hogTheLog:(NSLock*)l {
[l lock];
sleep(3);
[l unlock];
}
@end
Run Code Online (Sandbox Code Playgroud)
小智 6
我不确定Xcode有多长时间有这个功能,我只在5.1中注意到它.在"Time Profiler"仪器配置中,现在有一个复选框"Record Waiting Threads".在此模式下,它记录应用程序在每个方法/功能上花费的确切时间等(而不是仅测量CPU时间).

我将采样间隔设置为20 ms,否则总体上会太慢.
UPD:同样,将"Sample Perspective"(在屏幕截图的左下角)设置为"Running Sample Times"以在线程从图片中空闲时丢弃样本.
| 归档时间: |
|
| 查看次数: |
2066 次 |
| 最近记录: |