ios – arm64 objectForKey性能异常?

ios – arm64 objectForKey性能异常?,第1张

概述为了做一个很短的故事,我在32位iPhone应用程序中查看性能问题.在这个过程中,我删除了限制我为32位的第三方库,当我为arm64构建时,我看到与该库无关的代码段的速度提高了2倍. 我的印象是简单地将arm64添加到有效架构中并不会带来性能的显着提升,所以我想知道我的案例是否只是一个异常现象. 在将我的应用程序削减到显示性能差异的几十行的过程中,我失去了一些收益,但它仍然很重要.看似微小的变化, 为了做一个很短的故事,我在32位iPhone应用程序中查看性能问题.在这个过程中,我删除了限制我为32位的第三方库,当我为arm64构建时,我看到与该库无关的代码段的速度提高了2倍.

我的印象是简单地将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性能异常?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1023313.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存