我正在使用 Swift 处理非常大的数组,并得出结论,在向其中添加元素时,它们非常慢。
主要是在NULL
中使用数组时,我才注意到这些问题。
ex:EndDate
因此,我决定使用游乐场对一个非常简单的CURRENT_TIMESTAMP
测试进行基准测试,以为问题来自def first_code_from_headfirst():
# odds = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55,
# 57, 59]
my_odds = list(range(1, 60, 2))
print(my_odds)
for el in range(5):
right_this_minute = datetime.today().minute
if right_this_minute in my_odds:
print("this minute seems a little odd")
else:
print('not an odd minute.')
本身:
C:\Users\{myUsername}\AppData\Local\Microsoft\MSBuild\v4.0
此代码需要永久完成。现在,使用真实的Dictionary
在 C#中使用相同的代码,甚至不需要 秒 。
var array = [String : [String]]
我知道Swift中的数组并不是其他语言中的列表,在其他语言中,您可以灵活地选择array
,array
。 Swift,每次添加新元素时都会重新分配,并且基本上将所有数组都放在更新的更大空间中。
我们该如何解决?
编辑1: Hamish指出,使用Xcode Playground环境进行性能跟踪是一个糟糕的主意。他说得对,Swift var arr = [Int]()
for i in 0..<1_000_000 {
arr.append(i)
}
在Playground中不使用时的速度与C#一样。
编辑2:与List
相关的性能问题不是由IList list = new List<int>();
for (int i = 0; i < 1000000; i++) {
list.Add(i);
}
本身引起的,而是仅在字典中使用ArrayList
时引起的强>。请参阅下面的答案。
答案 0 :(得分:0)
这个问题主要是由于[255, 216, 255, 224, 0, 16, 74, 70, 73, 70, 0, 1, 2, 1, 0, 100, 0, 100, 0, 0, 255, 225, 13, 5, 69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 7, 1, 18, 0, 3, 0, 0, 0, 1, 0, 1, 0, 0, 1, 26, 0, 5, 0, 0, 0, 1, 0, 0, 0, 98, 1, 27, 0, 5, 0, 0, 0, 1, 0, 0, 0, 106, 1, 40, 0, 3, 0, 0, 0, 1, 0, 2, 0, 0, 1, 49, 0, 2, 0, 0, 0, 20, 0, 0, 0, 11]
函数必须创建位置然后填充位置而引起的,
如果您对数组的大小有一个了解,可以给它一个大小,然后为它分配空间,而不是先创建分配然后填充它,然后稍稍加快一点 尝试使用此代码可以使我得到更快的结果。
.append
这是在操场上进行的,但是与var arr = [Int].init(repeating: 0, count: 1_000_000)
for i in 0..<1_000_000 {
arr[i] = i
}
工具或实际项目相比,操场上的性能极其缓慢,
但是此代码在操场上的速度稍快。