bcb的一个问题,不好意思拿到这来问了
定义了一个List ResultList 
for(int i=0;i<500000;i++)//此处本来是从数据库中取得数据,大小未知 

PAList AStruct;//astruct是个结构 
AStruct = new TAList; 
AStruct->no1=random(4); 
AStruct->no2=random(4); 
ResultList->Add(AStruct); 
} 后来删去相同的一部分 
for(int i=0;i<ResultList->Count-1;i++) 

for(int j=i+1;j<ResultList->Count;j++) 

PAList AStruct; 
AStruct = new TAList; 
AStruct = (PAList) ResultList->Items[i]; 
PAList BStruct; 
BStruct = new TAList; 
BStruct = (PAList) ResultList->Items[j]; 
if((AStruct->no1==BStruct->no1)&&(AStruct->no2==BStruct->no2)) {ResultList->Delete[j];j--}; } 
} 这个程序片断,运行速度很慢,估计是慢在一步步申请内存,而且可能产生了内存碎片--因为运行第二次就会提示系统内存不足,我现在想把链表改称数组形式,但是又有可能在if((AStruct->no1==BStruct->no1)||(AStruct->no2==BStruct->no2)) {ResultList->Delete[j];j--};这部花费太多时间,因为大小总是在变化,请问我该怎么办?

解决方案 »

  1.   

    new不用和delete配对吗,,PAList AStruct;//astruct是个结构 
    AStruct = new TAList; 

    ResultList->Add(AStruct); 赋值后应该可以释放AStruct吧
      

  2.   

    有什么理由一次装入50万个Struct 个数据?
    有了数据库才装进来干什么?
      

  3.   

    PAList AStruct;//astruct是个结构 
    AStruct = new TAList; 

    ResultList->Add(AStruct); 赋值后应该可以释放AStruct吧
    ------------
    不用delete[]释放,codeguard 会报错,没有释放,使用delete[]也会出现问题,delete也不行,那位能帮我测试一下,改成delphi也挺容易的,只要一两行数据就行了有什么理由一次装入50万个Struct 个数据?
    有了数据库才装进来干什么?
    --------------
    因为是查询,处理,和显示需要用呀