我的 内存怎么不断在涨呀?高手们请帮帮忙 ( 积分: 200 )

  • 主题发起人 主题发起人 xiao_chenke
  • 开始时间 开始时间
X

xiao_chenke

Unregistered / Unconfirmed
GUEST, unregistred user!
我用socket写了个服务,不停的向外发数据,写了一个队列线程来组织要发的数据,运行中内存不停的在涨,每次涨的不多,但二三天后系统就开始慢下来了,我查了,没有内存泄露,也用memproof看了,看不出什么问题,我该怎么办呀?
救命呀!!!!!
 
我用socket写了个服务,不停的向外发数据,写了一个队列线程来组织要发的数据,运行中内存不停的在涨,每次涨的不多,但二三天后系统就开始慢下来了,我查了,没有内存泄露,也用memproof看了,看不出什么问题,我该怎么办呀?
救命呀!!!!!
 
用这个sdk的函数吧,你能看的懂的.
SetProcessWorkingSetSize

:)
 
把下面的过程放到一个Timer中,每隔一段时间执行一次,如5秒。

procedure ClearMemory;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
Application.ProcessMessages;
end;
end;
 
我在队列中用了new()进 和dispose()出, 当运行时间一长好像总是不能完全释放申请的内存空间,不知道为什么?
 
是要每个线程都要用SetProcessWorkingSetSize来清内存吗?虚拟内存好象清不到?
 
这个情况也有可能会和机器配置有关,当前同时进行业务过多的时候,若机器的(cpu)二级缓存和(也可能虚拟)内存会一下处理不过来,会暂时反应过慢,而占用很多内存。
 
应该不是机器的原因,我换了几台计算机都是一样的,我将进队列和出的速度降慢内存还是在慢慢涨,好像有内存碎片不能回收样。
 
后退
顶部