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