SWIFT:uppercaseString的性能

时间:2015-07-31 12:51:36

标签: string performance swift nsstring

我有一个大文件(25 MB)的文本。我把它读成NSString var。我想使用" uppercaseString"将每个字符转换为大写字母。但功能如此缓慢,需要几分钟。 任何提示让它更快地工作?

添加了代码:

if let path = NSBundle.mainBundle().pathForResource("GERMANU", ofType: "txt") {
    var error: NSError?
    if let data = NSData(contentsOfFile: path, options: NSDataReadingOptions(), error: &error) {           
        if let datastring = NSString(data: data, encoding: NSMacOSRomanStringEncoding) {
            var upper = datastring.uppercaseString
 ...

这是有效的代码,但速度很慢。只有最后一行需要一直。

2 个答案:

答案 0 :(得分:1)

String::uppercaseString是即时的;创建字符串不是。

 # Long time
 12> var st : String = "".join(Array(count:25000000, repeatedValue: "a")) 
st: String = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..."

 # Short time
 13> st.uppercaseString
$R8: String = "AAAAAAAAAAAAAAAAAAAAAAAAAAAA..."

鉴于您使用的是Roman编码,转换为大写可能非常重要。也许您可以尝试其他编码(如果有其他编码)?您可以尝试init?(... usedEncoding ...)变体并在结果上调用fastestEncoding来探索一下。

注意:您可以使用以下命令直接从具有特定编码的文件创建Swift字符串:

if let datastring = String(contentsOfFile: path, encoding: ... , error: &error) {
  var upper = datastring.uppercaseString
}

答案 1 :(得分:0)

对我来说,它看起来像一个糟糕的库实现。使用NSString.uppercaseString()非常快(半秒)。所以我会使用它,但我正在使用Swift进行开发,因为我喜欢这种语言。所以我不想转回旧的东西。