程序优化和内存碎片的一个问题

cbuser 2004-03-13 10:51:32
定义了一个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--};这部花费太多时间,因为大小总是在变化,请问我该怎么办?
...全文
85 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
constantine 2004-03-15
  • 打赏
  • 举报
回复
帮你up
cbuser 2004-03-15
  • 打赏
  • 举报
回复
谁能帮我测试一下呀,不需要500000份数据,几份数据就行了,AStruct需不需要释放?
不用delete[]释放,codeguard 会报错,没有释放,使用delete[]也会出现问题,delete也不行,那位能帮我测试一下
xjcpower 2004-03-15
  • 打赏
  • 举报
回复
for(int i=0;i<ResultList->Count-1;i++)
{
for(int j=i+1;j<ResultList->Count;j++)
{
PAList AStruct = (PAList) ResultList->Items[i];
PAList BStructt = (PAList) ResultList->Items[j];
if((AStruct->no1=BStruct->no1)&&(AStruct->no2=BStruct->no2)) {
ResultList->Delete[j];
delete BStruct;
j--
}
}
}
xjcpower 2004-03-15
  • 打赏
  • 举报
回复
for(int i=0;i<ResultList->Count-1;i++)
{
for(int j=i+1;j<ResultList->Count;j++)
{
PAList AStruct = (PAList) ResultList->Items[i];
PAList BStructt = (PAList) ResultList->Items[j];
if((AStruct->no1=BStruct->no1)&&(AStruct->no2=BStruct->no2)) {
ResultList->Delete[j];
delete BStruct;
j--
}
}
}
cbuser 2004-03-15
  • 打赏
  • 举报
回复
其实我做的不是这样,只是这么写比较容易让大家看懂
jiangchun_xn 2004-03-15
  • 打赏
  • 举报
回复
我觉得你应该在sql上就把重复的去了

另外,对于这种,使用平衡2叉树要好一些,在插入的过程中就可以很快的查找相同的而不插入

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧