Classes2 单元

比较了一下。我感觉稍微有效的点的代码在Grow部分。

这是TMyList的Grow

procedure TMyList.Grow;
begin
  
if FCapacity<64 then SetCapacity(FCapacity+8)
  
else if FCapacity<256 then SetCapacity(FCapacity+32)
  
else if FCapacity<1024 then SetCapacity(FCapacity+64)
  
else SetCapacity(FCapacity+128);
end;

 这是TList的

procedure TList.Grow;
var
  Delta: Integer;
begin
  
if FCapacity > 64 then
    Delta :
= FCapacity div 4
  
else
    
if FCapacity > 8 then
      Delta :
= 16
    
else
      Delta :
= 4;
  SetCapacity(FCapacity 
+ Delta);
end;
大概这样分配的时候,根据List的已有长度,降低分配的容量。 降低内存的使用量。不过这样会大大减慢list处理add的速度。我试验了一下,同样添加30万个指针,vcl只花了60毫秒左右,而mylist确花了8秒多。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值