我有一个例程,它将有序元素(“日”或“夜”枚举类型)添加到多维动态数组中,该数组声明为:
TShiftType = (stDay, stNight);
TScheduleArray = array of array of array [1..DaysPerWeek] of TShiftType;
数组可以包含1个元素之间的任何内容(例如。
(Day, Day, Day, Day, Day, Night, Night)
)超过20000个元素。根据处理的周数,每个元素本身可能有子元素。
因此,两周数组中的一个元素可能如下所示:
((stDay, stDay, stDay, stDay, stDay, stNight, stNight), (stDay, stDay, stDay, stDay, stDay, stNight, stNight))
当元素数量相对较低(大约在1000以下)时,这种方法运行速度非常快,效果非常好。一旦周数和元素数增加,只需向数组中添加一个新元素(在调用
SetLength
将数组长度增加1)开始以指数方式减慢。
有时我也会遇到访问冲突。当我在Delphi中使用“查找错误”功能时,它会将我带到
@DynArrayAsg
方法。但我从来没有得到过
EOutOfMemory
这是对内存访问速度减慢的预期行为吗?我使用的是Delphi6。