范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Swift子数组提取性能优化分析

  在写本文时,本人成功替某一个知名在线答题平台的后台优化一个Swift代码模块的运行效率,并使之上线后运行效率提升了数十倍。经过这次经历,本人决定将优化的经验进行一一分享,优化包括了字符串解析、数组操作、指针操作等。其中一个值得分享的经验就和数组操作有关。
  数组对于大部分语言而言,都是相同数据类型的元素的集合。是非常常见的一种数据类型,正因为它非常常见,所以针对它的优化往往能达到立竿见影的效果。
  其中,从数组中获取子数组正是诸多应用场景中较为常见的一种。本文通过实际代码分析几种获取子数组的实现方案,比较其中的性能差异,从而让我们在开发中根据自身需要选择合适的方案来解决性能问题。
  为了运行测试代码,我们通过Xcode File New Project command line tool创建一个命令行程序工程,并新建一个任意名字的swift文件进行编辑开发。如果是在非Mac环境下通过swift命令行进行编译,可以编辑一个swift文件后,用swiftc命令行进行编译。如文件main.swift,则编译命令为swiftc main.swift,然后运行./main。
  给定问题
  我们假设你的项目中需要一个非常大的数组存放数据,数组的元素是基础元数据类型(比如Int)有时候你需要从这大块数组中获取同样不小的子数组,并且获取结果数组。
  我们定义源数组变量名为array,赋值数据给它 12000000(一千二百万),这个规模足够用来测试性能了。
  let arrayCount = 12000000
  var array: [Int] = Array(repeating: 0, count: arrayCount)
  for i in 0..
  array[i] = i
  }
  接下来我们定义一个数组变量 dest 用来接收数据,我们用dest来接收array的子数组,要求它获得 array 的前 6000000 (六百万)个数据元素。
  let destCount = 6000000
  var dest: [Int] = []
  接下来我们来按要求写代码来给 dest 进行赋值。
  方法 1:for求解
  这个问题非常简单,但凡有代码基础的人都知道怎么做,直接一个for循环不就完事了吗?我们只要先给dest赋值成指定大小的数组,然后用for循环挨个赋值即可。
  print("engine = t1")
  let t1 = Date()
  // 求解
  dest = Array(repeating: 0, count: destCount)
  for i in 0.. ArraySlice
  该函数的功能正是提供一个数组的子数组,完美符合我们的要求!
  该函数是一个区间运算符函数,它的效果和函数调用是一样的,只是调用方法上是通过例如 [a.. UnsafeMutableRawPointer!
  3. while 循环比for循环更快
  在swift中,由于区间运算符的性能开销,while循环一般比for循环要快不少。在大部分时候这是无关紧要的,但如果发现自己的产品有性能瓶颈,好好检查下是不是for循环导致的吧。
  4. 注意打开编译器优化开关
  为了优化起见,大部分时候编译选项打开-O开关一般而言总是最佳选择。这会让运行性能大大提升。
  本文所提到的源代码已经上传到我的github,地址是:https://github.com/FengHaiTongLuo/Swift-Study/blob/main/get_subarray_performance_compare.swift

智慧家庭社区赛道吸金不断,睿住智能抢先入主万亿蓝海市场中国随着5G技术纳入国家发展战略,万物皆可联将成为未来智能化城市生活的重要发展方向。而作为智慧城市最核心的组成部分,智慧家庭智慧社区也成为未来智能化发展的重要载体和试点工程,在5G真情演唱心怀感恩记郑州一中经开区实验学校开展送文艺节目主题班会活动为进一步推动河南省文明行为促进条例条例贯彻落实,教育引导广大师生树立文明观念,养成文明行为习惯,结合新时代文明实践中心建设和3月5这个国庆假期,让ROG陪你一起度过可好?尽管刚刚休完中秋小长假不久,但想必大家一定和小A一样开始盼着一周后的国庆假期了吧应该也有不少小伙伴早就计划好的国庆假期的游玩行程,但无奈因为疫情的关系,只能临时调整成卧室客厅7日游苹果新品发布会时间确定北京时间9月8日凌晨,苹果如期公布了2021年秋季发布会的邀请函。苹果将在北京时间9月15日凌晨一点召开新品发布会。有没有小伙伴陪圈圈熬到一点的呢?除了iPhone13之外,目前有工厂生产流水线工业固定式读码器的6种功能我们都知道采用工业流水线生产的企业可以提高生产的效率,而产品一多利用传统的计算方式就会出现工作量巨大的问题,这么才能解决产品管理难这一问题呢?在流水线引入工业固定读码器,可以有效解工业流水线二维码DPM金属码扫码枪怎么选在当今越来越智能化的时代,二维码扫码已然很普及。在日常生活及工业生产制造中,几乎随处可见,应用领域广泛。小到大型商场,小致路边摊应用到二维码扫码付款,大到大型工厂的生产制造流水线上经济实用的工业流水线生产读码器产品追溯选择工业读码器是用来解决生产流水线上的条码自动问题,并可通过判断读取条码的不同状态来控制流水线的开启和停止,以实现产线的自动化功能,如生产制造业的自动流水线,包装线传送带,物流分拣流水得利捷Matrix320读码器,提升流水线二维码扫码读取率得利捷Matrix320读码器,提升流水线二维码扫码读取率。随着我国经济的迅猛发展,人们的物质生活水平不断提高,从吃饱穿暖到追求美好的品质生活,老百姓也越发注重生活的高质量。特别是小米折叠手机,惊艳亮相,等多久也值得外媒近日发布了一组小米折叠手机的概念渲染图,从图片看这次小米的设计别出心裁,也是收获许多网友青睐,纷纷询问何时正式发布。其实在今年2月份,华为和三星也发布了自己的首款折叠屏手机,但起售11。19万,星途又添新车,名为追风提供2种动力方案!星途汽车,对于奇瑞来讲是重要的布局,但实际上家族车型,销量只能说是一般,在国内市场存在感不足。但奇瑞一直并没有放弃,目前上市的新款车型,星途追风,从指导售价来看,是在11。1913对标五菱宏光MINIEV,新款雷丁芒果上市,起售2。98万!价格亲民的纯电动车型,热度一直很高,今天要跟大家来聊的是刚刚上市没有多久的新款雷丁芒果,很多人了解雷丁芒果,还是从中餐厅节目上看到的,作为一款微型纯电动车型,颜值上并不低,从指导价
python的print命令print命令用来输出指定对象的内容,语法为print(对象1,对象2,sep分隔符,end终止符)1。对象1,对象2,print命令可以一次打印多个对象数据,对象之间以逗号,分开陈磊已变道,拼多多未偏航采写陈纪英在拼多多创始人黄峥,把董事长职位交接给陈磊的那一天,他可能会想起2002年的一场相逢。美国威斯康星州首府麦迪逊,威斯康辛大学麦迪逊分校所在地,即将在此开启硕士生涯的新生黄5G速联全新UI展开讲讲DiLink4。0(5G)8月29日成都车展,比亚迪DiLink4。0(5G)智能网联系统震撼发布。一起来看看它隐藏的那些黑科技车载5G无限畅快DiLink4。0(5G)的5G技术率先在汉车型上搭载,汉EV太任性!王思聪最新电脑配置曝光,早在上个世纪个人拥有一台电脑已经算是一件很了不起的事情了,但是在如今电脑已经越来越普及,一台家用普通电脑价格超过一万就可以算是豪玩了。作为任性富二代王校长王思聪可不是这么认为的,近iPhone11Pro最新售价确认,标配版跌至新低,可以不等iPhone13了市面上的优质旗舰手机有很多,而许多消费者们之所以没有入手,其实主要的原因就是因为代价太大,因为优质旗舰手机的价格往往也非常高,而一款手机好不好是一个方面,值不值得买就是另一回事了,为外卖小哥缴纳社保美团未来何去何从?最近一段时间,各项政策纷纷出台,从教育到住房,从外卖到娱乐圈,都出现了不少的新规定。对于互联网巨头的美团,在这次风暴中也受到了巨大的影响。其中影响最大的当属反垄断和骑手社保问题了。2021年8月编程语言排行榜今年如果说哪个专业最受高考考生的喜爱,非计算机和软件行业莫属计算机和软件行业又离不开编程语言的支持,那么到底哪种语言最流行?世界上都有哪些语言深受开发者喜爱?近日HelloGitH京东上线二手交易平台鲸置9月2日消息,据Tech星球报道,近日,京东上线了一款名为鲸置的二手交易平台,目前,该应用已上架苹果AppStore和Android应用商城。官方介绍显示,鲸置是京东集团旗下二手闲2021年华为手机哪款性价比最高?20003000400050007500元推荐全文长达1万3千字,建议先关注我,可随时在我的主页查看更多数码选购指南硬核技巧科普如果对你有帮助,你的一个小小赞同就能让我开心半天。华为终端旗下原本拥有华为手机和荣耀手机两大品牌,联想拯救者3Pro有望首发898,165Hz6000mAh,完美电竞旗舰来袭联想是从2003年开始才进入智能手机领域,与小米华为OV相比联想起步较晚。联想虽是后来者,但联想手机的产品线还是比较广的,高中低端机型都有,有点像如今的小米产品比较齐全。联想做手机花呗,借呗逾期了,这两天都有接到电话说叫我应诉,我该怎么办?首先要做的是不要慌,拿出电话拨打12368查询是否被真正起诉,如果被起诉准备好相关资料,证件积极应诉不要逃避,如没被起诉那就是催收的一些套路如果你有证据可以到投诉它们。接下来我说下