Arrays Swift局部与全局范围阵列

Arrays Swift局部与全局范围阵列,arrays,performance,swift,Arrays,Performance,Swift,在这个论坛上,Swift测试版并不是阵列性能领域的赢家 但有人注意到Swift在处理全局声明数组时完全迷失了方向吗 看看下面的代码片段。我测得的重复次数完全是灾难性的。我想不出有哪种情况会导致这种荒谬的结果,并使我的Macbook 2014处理器全速运行 我是遗漏了什么还是有什么解释?请相信我 let maxElements = 1000000; . . . func printElapsedTime(startTime: NSDate, message: String) {

在这个论坛上,Swift测试版并不是阵列性能领域的赢家

但有人注意到Swift在处理全局声明数组时完全迷失了方向吗

看看下面的代码片段。我测得的重复次数完全是灾难性的。我想不出有哪种情况会导致这种荒谬的结果,并使我的Macbook 2014处理器全速运行

我是遗漏了什么还是有什么解释?请相信我

let maxElements = 1000000;
.   
.      
.
func printElapsedTime(startTime: NSDate, message: String) {
  let endTime = NSDate();
  println(message + ": " + NSString(format:"%.6f", endTime.timeIntervalSinceDate(startTime)) + " sec");
}

func benchMark1() {
  var localArray = Array(count:maxElements, repeatedValue:String());

  let someString = "Percy Jackson - The Titan's Curse";
  var anotherString: String;

  var startTime = NSDate();
  for i in 0..<maxElements {
    localArray[i] = someString;
  }
  printElapsedTime(startTime, message: "Elapsed time for creating and altering a local array");

  startTime = NSDate();
  for i in 10..<20 {
    anotherString = localArray[i];
  }
  printElapsedTime(startTime, message: "Elapsed time accessing 10 elements of the local array");
}
// Elapsed time for creating and altering a local array: 2.637573 sec
// Elapsed time for read accessing 10 elements of the local array: 0.000039 sec

func benchMark2() {

  var localArray = Array(count:maxElements, repeatedValue:String());
  let someString = "Percy Jackson - The Titan's Curse";
  var anotherString: String;

  var startTime = NSDate();
  for i in 0..<maxElements {
    localArray[i] = someString;
  }
  self.globalArray = localArray;
  printElapsedTime(startTime, message: "Elapsed time for creating/altering a local array and copy it into a global array");

  startTime = NSDate();
  for i in 10..<20 {
    anotherString = globalArray[i];
  }
  printElapsedTime(startTime, message: "Elapsed time accessing 10 elements of the global array");
}
// Elapsed time for creating/altering a local array and copy it into a global array: 9.570817 sec
// Elapsed time read accessing 10 elements of the global array: 143.937524 sec !!!!

我不知道你的设置有什么问题,我得到的时间安排与你的1000个项目完全不同。创建和更改本地数组的运行时间:2.060414秒访问本地数组的10个元素的运行时间:0.021805秒创建/更改本地数组并将其复制到全局数组的运行时间:2.112086秒访问全局数组的10个元素的运行时间:0.02161秒。话虽如此,现在评估语言性能还为时过早,他们可能仍在使用非常简单的实现,以便能够轻松地更改内容。我的安装Fabrice没有任何问题,除了测试版的积压工作。我刚刚安装了XCode 6 Beta-5,发现与您的基准测试结果类似,甚至稍好一些。试着在Beta-4仍然存在的时候运行它们,你就会明白我的观点。“判断性能为时尚早?实现幼稚?”我不这么认为。很多beta测试工作都与性能有关,尤其是在处理新语言时。查看论坛!同样,数组处理由众所周知的技术组成,本质上是在堆栈或堆上分配连续空间块,对于大小可变的项,则构建索引以便于访问。对于固定大小的项目,可以轻松计算偏移量,因此不需要索引。看起来,Swift开发人员故意构建了一些重载循环,因为我的处理器在呻吟,好像它必须计算pi的最后几位数字,就在这个数字滑向无穷大之前。通过去掉这些多余的工作负载,这些人可以炫耀自己完成了一项了不起的优化工作。但我们还没到那里。将Swift阵列性能与objective-c进行比较。很差,但正如你所指出的,最终产品还是有希望的。但是现在,尝试创建全局数组并立即用数据填充它,这样就不用临时本地数组了。这需要很长时间!另一个实现问题?我没有考虑数组实现,而是考虑如何访问和存储变量或实例属性。我不认为本地数组和实例中的另一个数组之间有太大的区别。。。Dynamic现在部分实现,但使用objc运行时。他们已经说过这会变得更好。。。天真的执行,我保持我的立场。