Skip to content

Instantly share code, notes, and snippets.

@mono0926
Last active January 15, 2017 06:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mono0926/6839352ed11136f0d1a860e5390e2806 to your computer and use it in GitHub Desktop.
Save mono0926/6839352ed11136f0d1a860e5390e2806 to your computer and use it in GitHub Desktop.
import XCTest
class StringPerformanceTests2: XCTestCase {
let chars = Array("あいうえお一二三四五1️⃣2️⃣3️⃣4️⃣5️⃣".characters)
var input: String!
override func setUp() {
super.setUp()
input = ((0..<100000).map { _ in String(chars[Int(arc4random_uniform(UInt32(chars.count))) % chars.count]) }).joined(separator: "")
}
func testPerformanceBytesInitializer() {
let bytes = Array(input.utf8)
self.measure {
(0..<10).forEach { _ in
_ = String(bytes: bytes, encoding: String.Encoding.utf8)
}
}
}
func testPerformanceCharactersArrayCast() {
self.measure {
(0..<10).forEach { _ in
_ = Array(self.input.characters)
}
}
}
}
@mono0926
Copy link
Author

mono0926 commented Jan 15, 2017

実機・リリースビルドにて、"あいうえお一二三四五1️⃣2️⃣3️⃣4️⃣5️⃣"からランダムに取得して組み立てた10万文字の文字列で検証。


Character Viewの全スキャンは高コストで、例えばString.init(bytes:encoding:)と比べて27倍程度時間かかった(文字列内容が"abcdefghijklmnopqrstuvwxyz"からランダムの時は1,000倍程度差が付いたり文字列によって結果はけっこう異なった)。

screen shot 2017-01-15 at 15 24 36

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment