我的印象是简单地将arm64添加到有效架构中并不会带来性能的显着提升,所以我想知道我的案例是否只是一个异常现象.
在将我的应用程序削减到显示性能差异的几十行的过程中,我失去了一些收益,但它仍然很重要.看似微小的变化,如字典键中的字符数和键中对象数量的混合,会产生很大的不同.
以下代码是示例应用程序的全部内容 – 放置在vIEwDIDLoad中.使用X64 5.1使用arm64构建,在我的iPhone 5s(iOS 7.1)上运行,检索2075个字典对象的平均时间约为0.6秒,构建armv7s,大约1.0秒.
对于可以在一般情况下利用的性能改进是否有一个简单的解释?
#define NUM_DICT_ENTRIES 2075NSMutableDictionary *aDict = [[NSMutableDictionary alloc] init];NSDictionary *keyDictionary;for (int i = 0; i < NUM_DICT_ENTRIES; i++) { if (arc4random_uniform(2)) { keyDictionary = [NSDictionary dictionaryWithObjectsAndKeys: [[nsprocessInfo processInfo] globallyUniqueString],@"entry",[[nsprocessInfo processInfo] globallyUniqueString],@"category",nil]; } else { keyDictionary = [NSDictionary dictionaryWithObjectsAndKeys: [[nsprocessInfo processInfo] globallyUniqueString],@"article",nil]; } NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys:[[nsprocessInfo processInfo] globallyUniqueString],@"xyzzy",nil]; [aDict setobject:d forKey:keyDictionary];}#define NUM_IteraTIONS 10NSTimeInterval runTime = 0;for (int i = 0; i < NUM_IteraTIONS; i++) { NSDate *start = [NSDate date]; for (NSDictionary *keyDictionary in aDict) { [[aDict objectForKey:keyDictionary] objectForKey:@"xyzzy"]; } runTime += [[NSDate date] timeIntervalSinceDate:start];}NSLog(@"average of %d iterations = %f",NUM_IteraTIONS,runTime/NUM_IteraTIONS);解决方法 很难说具体改进了这项测试. arm64与armv7有很多变化,可能会影响性能.一些例子:
> arm64对某些类型使用Objective-C标记指针对象.使用这些类型的代码可能更快或使用更少的内存.
> arm64存储Objective-C保留对象本身中大多数对象的计数,而不是单独的表.执行大量保留/释放流量的代码可能更快.
> arm64指令集对某些 *** 作更有效.执行正确的数学或内存 *** 作的代码可能更快.
> arm64的64位指针占用更多内存.指针大量内存约束代码可能会更慢.
这两个版本的仪器跟踪可能会发现性能差异.
总结以上是内存溢出为你收集整理的ios – arm64 objectForKey性能异常?全部内容,希望文章能够帮你解决ios – arm64 objectForKey性能异常?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)