打印大量文本时 Xcode 10 控制台日志速度很慢

Dan*_*gan 5 xcode10

我注意到在 Xcode 10 中打印大量文本时控制台日志的性能显着下降。例如,在打印收集服务器数据时就会发生这种情况。是否有任何已知的解决方案或相关信息?

erd*_*ips 1

我在 Swift 中使用命令时遇到同样的问题print,但前提是附加了调试器。

\n\n

我通过检查调试器是否已连接然后使用而NSLog不是 来解决它print

\n\n

要检查您的应用程序是否在调试器模式下运行,请参阅此处:检测 Swift 应用程序是否正在从 Xcode 运行

\n\n

考虑到 Xcode 8 + iOS 10 及更高版本的日志条目会被截断,请参阅此处:iOS 10 / Xcode 8 设备上的 NSLog 似乎会被截断?为什么\xef\xbc\x9f

\n\n

编辑 2019 年 3 月 5 日:

\n\n

我使用/sf/answers/2793493251/中的解决方案修复了它

\n\n

斯威夫特 4.2:

\n\n
extension String {\n    func components(withLength length: Int) -> [String] {\n        guard length > 0 else {\n            return [self]\n        }\n\n        return stride(from: 0, to: self.count, by: length).map {\n            let start = self.index(self.startIndex, offsetBy: $0)\n            let end = self.index(start, offsetBy: length, limitedBy: self.endIndex) ?? self.endIndex\n            return String(self[start..<end])\n        }\n    }\n}\n\nfunc amIBeingDebugged() -> Bool {\n    var info = kinfo_proc()\n    var mib : [Int32] = [CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid()]\n    var size = MemoryLayout<kinfo_proc>.stride\n    let junk = sysctl(&mib, UInt32(mib.count), &info, &size, nil, 0)\n    assert(junk == 0, "sysctl failed")\n    return (info.kp_proc.p_flag & P_TRACED) != 0\n}\n\nfunc FixedNSLog(_ format: String, _ args: CVarArg...) {\n\n    let maxStringLength = 800\n    let string = String(format: format, arguments: args)\n\n    let substrings = string.components(withLength: maxStringLength)\n    let substringsCount = substrings.count\n\n    if substringsCount > 1 {\n        NSLog("!!! WARNING !!! The following message is printed by \\(substringsCount) parts, because of Xcode 10 console issues")\n    }\n\n    substrings.forEach { (substring) in\n        NSLog(substring)\n    }\n\n}\n\nfunc log(_ message: String) {\n    if amIBeingDebugged() {\n        FixedNSLog(message)\n    }\n    else {\n        print(message)\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n