我做一扫描一段IP程序如下:开1000个线程扫不同的ip,做如下操作:<1>ping;<2>连接139端口;<3>取mac地址;现在做好发现在扫30万个ip时,发现内存不断被吃,扫描一个ip结束时资源并没有完全释放(可能是网络资源没有释放)谁有好的解决方法?(我在每个线程启动时创建一个clientsocket,扫描过程中代入不同的ip,在线程结束后释放 clientsocket)。
同时我试用另一个方法:扫一个ip我起一个线程,创建clientsocket,线程结束释放clientsocket,直到起到1000个线程,这时发现有时程序被window强行关闭,但delphi没有捕捉到异常。为什么?
兄弟们有高招赶紧出手啊,分数一次只能给予100,但我可以连续发贴给分哪!!!
同时我试用另一个方法:扫一个ip我起一个线程,创建clientsocket,线程结束释放clientsocket,直到起到1000个线程,这时发现有时程序被window强行关闭,但delphi没有捕捉到异常。为什么?
兄弟们有高招赶紧出手啊,分数一次只能给予100,但我可以连续发贴给分哪!!!
或改用Indy的组件,也可以改写别的组件来适应你的需要
1000Threads,太多了/ by LY http://www.99898.com/www/lysoft
t: Linger;
begin
...
ClientSocket.Open;
t.l_onoff := 1;
t.l_linger := 0;
setsockopt(ClientSocket1.Socket.SocketHandle, SOL_SOCKET, SO_LINGER, @t, sizeof(t)); // goon your code...
....
end;还有你最好用是不是使用线程池来实现,还是说扫描完成后,线程也就free了最好用线程池吧减少线程的create, free的。
http://www.playicq.com/databack/pooler.zip