In this new post series we’ll show highlights of Swift Talk, our subscription video series. Today, we’ll show a very nice trick by Ole Begemann to increase String processing performance.

In Swift Talk 79, we try to improve CSV string parsing performance by measuring and comparing the performance of various techniques. To write a performance test, we wrap the parsing of the loaded string in an XCTest measure block:

func testPerformance() {
    let bundle = Bundle(for: ParseCSVTests.self)
    let url = bundle.url(forResource: "", withExtension: "txt")!
    let  = try! (contentsOf: url)
    let string = String(: , encoding: .isoLatin1)!

    measure {
        _ = parse(lines: string)

The change is a rather obscure tip we got from Ole:

let string = String(data: data, encoding: .isoLatin1)! + ""

When we append an empty string to the test string, we get a performance improvement of 18 percent:

The reason for the performance gain: a string can be backed by a Swift String or an NSString. By appending an empty string, we force it to be backed by a Swift String, with which our algorithm works much faster.

In the remainder of the episode, we also show a technique suggested by Matt Gallagher from Cocoa with Love, and increase performance by another 83%. The episode and transcript are available for subscribers, and are part of the Swift, The Language collection.

Source link

No tags for this post.


Please enter your comment!
Please enter your name here