intraweb的问题,每一个session调用都会增加服务器端很多内存,如何解决 ( 积分: 100 )

  • 主题发起人 主题发起人 zjwjw
  • 开始时间 开始时间
Z

zjwjw

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库有19M
usersession里面放了adoconnection
iwform里面放一个adotable和一个adoquery,二个都连到adoconnection,另外还有二个datasource
adotable和adoquery默认让它打开,每次访问页面,adotable只返回20条记录,adoquery返回10多条左右
但是,每开一个窗口访问http://localhost:8888就会让服务器端增加40多M内存,而且客户端关掉Ie不释放,请问如何解决内存占用如此大的问题
我用的是appMode,intraweb用的是7.2.10,数据库用access
 
数据库有19M
usersession里面放了adoconnection
iwform里面放一个adotable和一个adoquery,二个都连到adoconnection,另外还有二个datasource
adotable和adoquery默认让它打开,每次访问页面,adotable只返回20条记录,adoquery返回10多条左右
但是,每开一个窗口访问http://localhost:8888就会让服务器端增加40多M内存,而且客户端关掉Ie不释放,请问如何解决内存占用如此大的问题
我用的是appMode,intraweb用的是7.2.10,数据库用access
 
虽然你第页只返回30条记录,但实际上你把adotable和adoquery默认打开状态,所以每创建一个session,实际上都返回了整个数据集19M呀,两个加在一起当然有40M了。

session本身是很消耗资源的,如果在session中保存一些变量是可行的话,在session中存放数据集是绝对不可取的。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2965912

至于关掉ie不释放的问题,是由于客户端中没有动态释放它,session("sessionname")=none。
 
是不是在session中定义一些变量保存数据集的状态
然后在每次查询的时候再打开数据集,打开之后关闭?如果这样做的话那也太麻烦了

我已经改了其中一个adoquery为动态创建,查询完毕释放,另一个adotable没改,内存耗费还是相当大

另外我看了网上有些下载的例子中也是打开之后没有关闭,耗费也不是很大
 
SQL里可以只对指定的N条记录进行查询,你让SQL每次只返回你要用到的那N条记录就可以了,关于“客户端中没有动态释放”,这个只能是你主动关闭session,要不然会耗死主机的
 
一般查詢完畢後都不需要關閉的呀
給你一段代碼,放在Session創建的時候
//------------剔除相同IP冗余Session,減少程式服務器Loading
vList := GSessions.LockList;
try
for i := 0 to vList.Count - 1 do begin
vPtr := TIWApplication(vList);
if (vPtr.ip = WebApplication.ip) and
(vPtr.SessionTimeStamp <> WebApplication.SessionTimeStamp) then begin
vList.Remove(vPtr);
vPtr.Free;
break;
end;
end;
finally
GSessions.UnlockList;
end;
 
不需要关闭,那么如何设置啊
每开一个就增加40多M,开不了几个窗口
难道是那个没有设置好?
 
>>然后在每次查询的时候再打开数据集,打开之后关闭?如果这样做的话那也太麻烦了

不是麻烦不麻烦的问题,这是网页访问机制的问题,归根结底是internet服务器的工作方式问题。

session是会话期变量,每建立一个session都会占用服务器的资源,因此你只能把它做为变量来用,用来控制每个会话的状态。而你现在实际上用它来保存数据的结果集,那么它的大小就相当于结果集的大小。

把数据集放在session中显示给客户是很烂的想法,实在不知道为什么会有那么多代码是这样写的。

可以用session来提交客户的验证,但是打死也不要把数据集放在session中返回给客户。

针对每一个访问返回一个显示页面是正常的做法,而且要根据每一访问页的需求来返回需要的数据,而不是把整个数据集在session中打开,这不能怕麻烦。


 
IWDBGRID的分頁顯示即是把當頁數據傳給客戶端,而不是全部
 
我发现了一个很奇怪的问题
代码不改,运行程序
打开三个session访问之后,内存达到125M
然后我把程序显示在最前面,再最小化,内存占用变为1M
真是太奇怪了,这样看来,好象不关动态创建和释放的问题
 
结了算了,问题依然没有解决
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部