请问高手,为什么运行得非常慢?如何改进??

laocar 2001-08-12 05:02:50
想把数据块中的一列(field)做平均,为什么运行得非常慢?如何改进?
...
for(int i=0; i<PointsToRead; i++) /// **1
{
DBTable->First();
while(!DBTable->Eof){ //***2
TField* Field=DBTable->FieldByName(FieldName);
TBlobField* ThisBlob;
ThisBlob=(TBlobField*)Field;
TBlobStream* ThisBlobStream;
ThisBlobStream=new TBlobStream(ThisBlob,bmRead);
int PointsToRead=ThisBlobStream->Size/sizeof(short);
if(PointsToRead<=0)
{
delete ThisBlobStream;
return;
}
short* Data=new short[PointsToRead];
ThisBlobStream->Seek(0, soFromBeginning);
ThisBlobStream->Read(Data, ThisBlobStream->Size);
Value+=Data[i];
delete ThisBlobStream;
delete [] Data;
DBTable->Next();
} //***2
Value=Value/SaveNo;
AnsiString Text;
Text=Value;
Text+="\n";
File->Write(Text.c_str(), Text.Length());
} ///***1
...全文
113 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
laocar 2001-08-14
  • 打赏
  • 举报
回复
??
fengerfeifei 2001-08-14
  • 打赏
  • 举报
回复
你是要求blob字段的长度的平均值吧?
可以用这样的语句
select avg(fieldLeng) avg from select DBMS_LOB.GETLENGTH(blob2) filedLeng from table

这是在oracle中的语法。关键在要求出blob字段的长度。oracle可用DBMS_LOB.GETLENGTH,不同的数据库也会有对应的求法。应该不难的
如果是求blob字段中的数据做平均建议将blob字段换成数字字段。
wangxd 2001-08-13
  • 打赏
  • 举报
回复
大概看了一下你的代码,没搞明白你的程序是干什么的,:-)
data既然是ansistring类型还求什么平均值呢
laocar 2001-08-13
  • 打赏
  • 举报
回复
恐怕只能用你的方法???
「已注销」 2001-08-13
  • 打赏
  • 举报
回复
可不可以把它读出来

然后写入一个临时的自由表中

然后…………

@_@
TR@SOE 2001-08-13
  • 打赏
  • 举报
回复
如果是这样的话,恐怕只能用你的方法了。因为你的数据被封到BLOB里去了。(我是这么理解的,否则,如何理解对一个BLOB字段求平均值呢?)

还是不明白你要干什么,为什么要把数据封到BLOB里去。
laocar 2001-08-13
  • 打赏
  • 举报
回复
各位高手,请说详细点。见上,一行7“块”,共100行(“字段”)。现在要将所有第2块平均,写入到一数据文件中。 30分奉送!
laocar 2001-08-13
  • 打赏
  • 举报
回复
程序执行后产生如下表格:
1 [BLOB] [*BLOB*] [BLOB] [BLOB] [BLOB] [BLOB] [Blob]
2 [BLOB] [*BLOB*] [BLOB] [BLOB] [BLOB] [BLOB] [Blob]
3 ......
...
100 [BLOB] [*BLOB*] [BLOB] [BLOB] [BLOB] [BLOB] [Blob]

现在要求所有带*号的[BLOB]平均值
Ask2 2001-08-13
  • 打赏
  • 举报
回复
程序执行后产生如下表格:
1 [BLOB] [*BLOB*] [BLOB] [BLOB] [BLOB] [BLOB] [Blob]
2 [BLOB] [*BLOB*] [BLOB] [BLOB] [BLOB] [BLOB] [Blob]
3 ......
TR@SOE 2001-08-12
  • 打赏
  • 举报
回复
不知道你想要干什么,如果只是简单地对一个字段求平均值,为什么不用:

select avg(afield) from atable

呢?

如果你用上面的方法只是为了求平均值,那不慢才怪呢。
Ask2 2001-08-12
  • 打赏
  • 举报
回复
有专门的命令语句,请查一查。
whitelion 2001-08-12
  • 打赏
  • 举报
回复
学一学select语句吧
select avg(afield) from atable
wangledong 2001-08-12
  • 打赏
  • 举报
回复
在频繁操作的代码中,不断的new和delete,不慢才怪!而且容易造成内存碎片的!
书生 2001-08-12
  • 打赏
  • 举报
回复
hehe,为什么不用avg()?有什么特殊的原因吗?

13,825

社区成员

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

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