Swift数组非常慢(在字典中使用时)

时间:2018-10-14 21:28:43

标签: arrays swift performance memory-management

我正在使用 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中的数组并不是其他语言中的列表,在其他语言中,您可以灵活地选择arrayarray。 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时引起的强>。请参阅下面的答案。

1 个答案:

答案 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 } 工具或实际项目相比,操场上的性能极其缓慢, 但是此代码在操场上的速度稍快。