print() / println() 执行速度慢吗?

2024-01-12

我有一个有几千行的应用程序,在该代码中有很多 println() 命令。这会减慢应用程序的速度吗?它显然是在模拟器中执行的,但是当您从应用程序商店/TestFlight 存档、提交和下载应用程序时会发生什么。这段代码仍然是“活动的”吗?被“注释掉”的代码又如何呢?

它是真的从未读过还是应该在提交到测试飞行/应用商店时删除注释掉的代码?


是的,它确实会减慢代码速度。
Both print and println降低应用程序的性能。

打印问题

println当 Swift 进行代码优化时,不会被删除。

for i in 0...1_000 {
  println(i)
}

该代码无法优化,编译后汇编代码将执行一个包含 1000 条指令的循环,而这些指令实际上没有做任何有价值的事情。

分析汇编代码

问题是 Swift 编译器无法对代码进行最优优化print and println命令。 如果您查看生成的汇编代码,您可以看到它。

您可以使用以下命令查看汇编代码Hopper http://www.hopperapp.com反汇编器或通过使用将 Swift 代码编译到程序集swiftc编译器:

xcrun swiftc -emit-assembly myCode.swift

快速代码优化

让我们看几个例子以更好地理解。
Swift 编译器可以消除很多不必要的代码,例如:

  • 空函数调用
  • 创建不使用的对象
  • 空循环

Example:

class Object {
  func nothing() {
  }
}

for i in 0...1_000 {
  let object = Object3(x: i)
  object.nothing()
  object.nothing()
}

在此示例中,Swift 编译器将进行此优化:

1.删除两者nothing方法调用

此后循环体将只有 1 条指令

for i in 0...1_000 {
  let object = Object(x: i)
}

2.然后它会删除创建Object实例,因为它实际上没有被使用。

for i in 0...1_000 {
}

3.最后一步是删除空循环。
我们最终没有代码可以执行

解决方案

  • 注释掉print and println

这绝对不是最好的解决方案。
//println("A")

  • Use DEBUG预处理器语句

通过这个解决方案,您可以简单地更改 debug_print 函数的逻辑
debug_println("A)

func debug_println<T>(object: T) {
  #if DEBUG
    println(object)
  #endif
}

结论

始终删除print and println从发布应用程序开始!

如果你添加print and println指令,Swift 代码无法以最优化的方式进行优化,并且可能导致巨大的性能损失。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

print() / println() 执行速度慢吗? 的相关文章

  • 如何在 swift 3 中发布原始数据?

    如果我使用 Postman 发布原始数据 就会收到响应 我正在使用这个代码 var dict Dictionary
  • Swift 和 Objective-C 框架公开其内部结构

    我正在尝试将 Swift 添加到具有公共 私有和项目文件的现有 Objective C 框架中 为了让 Swift 能够访问项目文件 我添加了一个定义新模块的模块映射 例如MyFramework Internal 通过包含所有项目标题 如下
  • 外围 BLE 设备的唯一标识符

    所以我有外围设备BLE设备 我需要一些标识符以便稍后与另一部 iPhone 共享 我连接的示例iPhone A 为外围设备 iPhone A 将外围设备的标识符保存到数据库中 稍后我可以轻松获取iPhone B 并连接到通过该标识符找到的外
  • 在 iOS safari 中禁用选择上下文菜单

    我想禁用在 iOS Safari 网络浏览器 中选择特定文本后出现的默认上下文菜单 那可能吗 这是可能的 请参阅这个例子 http jsfiddle net z9ZNU 基本上 重要的部分是设置正确的 css 属性 body webkit
  • 尝试在 Xcode 中为 OS X 应用程序设置 Tab 键顺序

    我正在使用 Xcode 7 3 构建 OS X 桌面应用程序 并尝试为其中一个表单设置 Tab 键顺序 我发现有几篇文章解释了 Xcode 4 的类似问题 但没有任何进展 https www youtube com watch v SRrE
  • 如何在 iOS 上的视图之间进行展开/收缩转换?

    我正在尝试在 iOS 中制作过渡动画 其中视图或视图控制器似乎扩展以填充整个屏幕 然后在完成后收缩回原来的位置 我不确定这种类型的转换的正式名称是什么 但您可以在 iPad 版 YouTube 应用中查看示例 当您点击网格上的搜索结果缩略图
  • 平板电脑在第一次单击时悬停,在第二次单击时单击

    发布这个问题主要是希望证实我对该行为的怀疑 从而为其他程序员记录下来 因为我在网上没有找到任何记录 我正在构建一个网站 其导航栏具有以下属性 水平截面是 ul of li 和一些 li li s 两者都有 A n a 元素带您进入该主题 触
  • 如何避免父ScrollView裁剪内部ScrollView?

    When a horizontal child ScrollView is nested inside a vertical parent ScrollView internal element is clipped by parent S
  • 如何在 SKAction 中途反转精灵所遵循的路径方向?

    我有一个 SKSpriteNode 它使用 SKAction 沿着圆形路径移动 create the path our sprite will travel along let circlePath CGPathCreateWithElli
  • 更新到 Xcode 7.0.1,项目现在有问题

    因此 我将 Xcode 6 1 版本上传到 iTunes Connect 并且该应用程序获得了批准 现在我正在尝试更新应用程序 我更新到 Xcode 7 0 1 Xcode 给我带来了问题 指出 对于应用程序 我使用了故事板和 Object
  • 为什么快速枚举中的可选项会导致无限循环?

    评估以下代码 我希望打印一次Hello World 相反 它会导致无限循环 有人可以解释为什么吗 let array what for text String in array print Hello World 删除可选的 显然让它只打印
  • 使用捏合手势;如何放大用户手指实际“捏”的位置?

    我已经在我的应用程序中的 UIImageView 上实现了 UIPinchGestureRecognizer 但是无论我在图像的哪个位置捏合 它似乎都会放大到同一个位置 有谁知道我如何让它放大到用户实际 捏 的地方 请参阅下面的代码 视图控
  • Swift 枚举内部是如何实现的?

    我最近问了一个问题C 中的通用枚举 结构 https stackoverflow com questions 68383728 if a uintptr t can be used to store both pointers and nu
  • 使用 iOS 设备作为 TCP 客户端 - 无 Bonjour

    我想使用 iOS 设备作为 TCP 客户端 但我找不到可理解的 API 指南 示例来说明如何做到这一点 我试过SimpleNetworkStreams and PictureSharing 但他们都使用 Bonjour 我可以轻松建立 UD
  • 包含字符串和数字的数组

    在 Objective C 中 很容易创建一个异构数组 如下所示 NSArray myArray String1 String2 123 456 有什么方法可以快速创建这样的数组吗 如果是的话怎么办 Note 我在 swift 中尝试了类似
  • 连接到 Apple Music

    所以我尝试使用 React Native 应用程序从 iOS 设备连接到 Apple Music 有一个 API 可以执行相同的操作 但我需要从 storekit 框架调用一个函数 提出个性化请求 苹果音乐API https develop
  • Facebook 登录 Apple CNA

    问题 是否可以设置 Facebook 登录以在 CNA 中使用 是否为开发人员提供 CNA 文档 您可以使用任何开发人员工具调试 CNA 屏幕吗 Details 我创建了一个使用电子邮件提交表单或 Facebook 登录按钮的强制门户登录页
  • iOS 11 getUserMedia 不起作用?

    苹果公司发表声明称getUserMedia将在 iOS 11 上完全正常运行 安装 iOS 11 Beta 版本 5 后 我确实收到一条消息 表明我的网站请求访问我的相机和麦克风 但似乎是这样的 video src window URL c
  • AVAudioMixerNode pan 或 AVAudioUnitSamplerstereoPan 属性无法更改 AVAudioEngine 声音输出的左/右平衡

    我有以下代码 它播放单个 MIDI 音符 但我希望能够调整平衡 平移 以便它仅从左扬声器或右扬声器或某些组合中播放 我认为更改 sampler stereoPan 或 engine mainMixerNode pan 也许可以解决问题 但它
  • 如何在 XCode5 中将部署目标更改为 5.1.1 [重复]

    这个问题在这里已经有答案了 我正在一个项目中工作 我需要支持 iOS 5 1 1 但在 部署目标 的下拉菜单中我没有 5 1 1 作为选项 我的问题是如何将 iOS 5 1 1 添加为部署目标 我将非常感谢你的帮助 如果您愿意 您可以在框中

随机推荐

  • 为什么我无法在 Python 中加入这个元组?

    e ham 5 1 bird logfile write join e 我必须加入它才能将其写入文本文件 join只接受字符串列表 所以先转换它们 gt gt gt e ham 5 1 bird gt gt gt join map str
  • 自定义链式比较

    Python 允许这样的表达式x gt y gt z 根据文档 这相当于 x gt y and y gt z except y仅评估一次 https docs python org 3 reference expressions html
  • Rails 3:获取当前名称空间?

    使用方法 layout for namespace 我根据我是在前端还是后端设置应用程序的布局 因为后端使用命名空间 admin 我找不到一种很好的方法来找出我所在的命名空间 我找到的唯一方法是解析 params controller 中的
  • VS Express 2013 for Web - 浏览器受到安全限制或 JavaScript 被禁用

    我最初在桌面上安装了 Microsoft Visual Studio Express 2013 for Web 我的桌面运行 Windows 8 1 和 Internet Explorer 11 它运行良好 直到许可证在前 30 天后过期
  • 如何指定 NSDictionary 的keysOfEntriesPassingTest 所需的块对象/谓词?

    出于学习 尚不实用 的目的 我想在 NSDictionary 上使用以下方法来返回一组键 这些键具有使用我定义的测试的值 不幸的是不知道如何指定谓词 NSDictionary keysOfEntriesPassingTest NSSet k
  • Emacs 诊断:Org 模式速度慢得难以忍受并且经常停止

    我的 Emacs Windows 10 64 位下的 GNU Emacs 25 1 1 x86 64 w64 mingw32 变得异常缓慢且不稳定 尤其是在 Org 模式下 例如可能会暂停 2 秒以上来移动光标 并暂停 3 秒以上来刷新以显
  • 查询的最小异或

    我在一次采访中被问到以下问题 给定一个数组A with N元素和数组B with M元素 对于每个 B X 返回 A I 其中 A I 和 B X 的 XOR 最小 例如 Input A 3 2 9 6 1 B 4 8 5 9 Output
  • 主从应用程序的每个部分可以有不同的行数吗?

    我是 Swift 和 iOS 编程新手 正在尝试制作一些简单的应用程序 我正在尝试构建一个主从应用程序 在主视图中 我给了表格视图两个部分 并将表格视图的内容设置为 静态单元格 最初 我给每个部分 3 行 并且能够在 mainviewcon
  • 当前 Subversion 修订命令

    是否有 Subversion 命令可以显示当前版本号 After svn checkout我想启动一个脚本并需要变量中的修订号 如果有这样的命令就太好了svn info get revision number 较新版本的 svn 支持 sh
  • React-Router:在导航到不同的路由之前将逻辑应用于组件

    在导航到不同的路线之前是否可以将逻辑应用于组件 例如 我的组件看起来像这样 class Example extends React Component Handles logic for when user leaves page hand
  • 将纬度/经度转换为 JTS?

    我正在尝试将 hibernate 空间与 JPA 集成以进行地理搜索 我一直在参考tutorial http www hibernatespatial org tutorial html在官方网站上 我与 hibernatespatial
  • Excel VBA 按标题名称而不是列进行搜索

    我需要一个执行以下操作的 VBA 宏 这部分工作正常 我希望它在sheet1上创建一个新列并将其命名为标题名称然后为其着色 Columns P P Select Selection Insert Shift xlToRight CopyOr
  • 上半部和下半部概念澄清

    根据上半部和下半部的指导方针 当任何中断发生时 都会由两个半部处理 所谓的上半部分是实际响应中断的例程 您用 request irq 注册的例程 下半部分是由上半部分安排的例程 稍后在更安全的时间执行 上半部处理程序和下半部处理程序之间的最
  • Pytest 使用线程无限期运行

    我正在使用 PyTest 为个人项目执行一些单元测试 pytest 调用一个初始化多个线程的类 由于这些线程无限期地运行 它们永远不会关闭 并且 pytest 永远不会终止 这意味着我运行测试的 gitlab 管道自动失败 线程对于测试和模
  • 使用WCF进行大数据传输

    我在一个项目中 必须使用 wcf 服务在源和客户端之间来回传输大量数据 将数据作为数据集 XML 对象数组传输的最佳选项是什么 或者还有其他选项吗 您可以使用 WCF 流 以下是了解更多信息的链接 大数据和流媒体 http msdn mic
  • 单个实体中的实体框架 1 到 0..1 关系

    Scenario 我有一个场景 在单个实体中为数据库中的两个表定义了 1 对 1 关系 我通过使用以下映射来做到这一点 为了保护无辜者 名称已更改 modelBuilder Entity
  • Symfony2 DoctrineExtensions preSoftDelete 事件调用

    我在为 Symfony2 实现 L3pp4ard DoctrineExtensions Bundle 中的 preSoftDelete 事件时遇到问题 softDelete 函数工作得很好 但我想在deletedAt 日期时间 旁边添加一个
  • 如何使用已排序的键列表对 OrderedDict 进行排序?

    假设我有一个collections OrderedDict对象及其重新排列的键列表 ordereddict collections OrderedDict key 78 value key 40 value key 96 value key
  • 我可以使用 Perl 正则表达式来匹配平衡文本吗?

    我想在 Perl 中匹配括号等中包含的文本 我怎样才能做到这一点 这是来自官方常见问题解答 http faq perl org We re 将 perlfaq 导入 Stack Overflow https meta stackexchan
  • print() / println() 执行速度慢吗?

    我有一个有几千行的应用程序 在该代码中有很多 println 命令 这会减慢应用程序的速度吗 它显然是在模拟器中执行的 但是当您从应用程序商店 TestFlight 存档 提交和下载应用程序时会发生什么 这段代码仍然是 活动的 吗 被 注释