大伙帮忙分析一下:
主要代码如下,100000循环是为说明问题加的,程序界面有一按钮来执行把所选目录中的照片全部导入到数据库中,
现状:如果连续导入超过10000张照片左右,虽然代码仍然在正确执行插入操作,但照片就插入不到数据库中了(数据库中的照片记录数不变了),退出该窗体,重新打开,在继续执行导入操作,可以正常导入,但执行到10000条左右,还是上述现象。数据库是ORACLE数据库,难道是内存释放的问题?如下释放代码有什么问题吗?加jpg:=TJPEGImage(nil)有意义吗?这句还没来得及试; var
jpg:TJPEGImage;
i:integer;
begin
for i:=1 to 100000 do
begin
jpg:=TJPEGImage.Create;
jpg.LoadFromFile( 'd:\a.jpg '); with cdspic do
begin
insert;
fieldbyname(zhaopian).assign(jpg);
post;
Applyupdates(0);
jpg.free;
end;
end;
end;
主要代码如下,100000循环是为说明问题加的,程序界面有一按钮来执行把所选目录中的照片全部导入到数据库中,
现状:如果连续导入超过10000张照片左右,虽然代码仍然在正确执行插入操作,但照片就插入不到数据库中了(数据库中的照片记录数不变了),退出该窗体,重新打开,在继续执行导入操作,可以正常导入,但执行到10000条左右,还是上述现象。数据库是ORACLE数据库,难道是内存释放的问题?如下释放代码有什么问题吗?加jpg:=TJPEGImage(nil)有意义吗?这句还没来得及试; var
jpg:TJPEGImage;
i:integer;
begin
for i:=1 to 100000 do
begin
jpg:=TJPEGImage.Create;
jpg.LoadFromFile( 'd:\a.jpg '); with cdspic do
begin
insert;
fieldbyname(zhaopian).assign(jpg);
post;
Applyupdates(0);
jpg.free;
end;
end;
end;
1、代码没有问题,是不是oracle的空间自动分配不足造成的,建议检查下;
2、建议将这种循环改下,改成1000次为一批,分100此循环进行看看,每个批次间加个sleep(?)
另外在图片插入不进数据库时,只有退出程序后,在重新打开程序执行才可以正常导入
谢谢楼上几位,加sleep(?)的方式我明天试一下
或者,你可以加大oracle的回滚段,不过这不能解决本质问题。