为什么采用异步方式ping局域网内存会不断增加
功能为:监测局域网机器上线、在线、下线,采用ping的异步调用方法,用timer组件每隔一段时间ping局域网内所有计算机一次,但是每ping一次内存都要增加个3m左右,采用gc.collection()去释放内存也不行,不知是什么原因,请高手指点。代码如下:
         private void timer1_Tick(object sender, EventArgs e)
         {
             PingEmployees();
         }
         public void PingEmployees()
         {            
             try  
		    {
                 foreach( GHPersonInfo person in m_PersonScanArray )  //GHPersonInfo 为自定义类,
                 {
                     Ping myPing = new Ping();
                      myPing.PingCompleted += new PingCompletedEventHandler(PingCompletedCallback);                      
                     string pingIP = person.IpAddress;
                     int timeout = 256;
                     string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
                     byte[] buffer = Encoding.ASCII.GetBytes(data);
                     PingOptions options = new PingOptions(32, true);
                     myPing.SendAsync(pingIP, timeout, buffer, options);
                 }
		    }  
		catch(Exception exc)
		{
			MessageBox.Show( "Exception: " + exc.Message);
		}
     }
         public  void PingCompletedCallback(object sender, PingCompletedEventArgs e)
         {
             // If the operation was canceled, display a message to the user.
             if (e.Cancelled)
             {
                 txtInfo.Text += "Ping canceled.";
             }
             // If an error occurred, display the exception to the user.
             if (e.Error != null)
             {
                 txtInfo.Text += "Ping failed:";
                 txtInfo.Text += e.Error.ToString();
             }
             PingReply reply = e.Reply;
             if (reply == null)
                 return;
             if (reply.Status == IPStatus.Success)
             {
                 GetEmployeesStatus(reply.Address.ToString(), IPStatus.Success.ToString());  //如果ping通,那么据当前时间,记录局域网机器的状态
             }
         }
------解决方案--------------------GHPersonInfo 为自定义类
这个做了什么事?看到不到
------解决方案--------------------
把那一句
  GetEmployeesStatus(reply.Address.ToString(), IPStatus.Success.ToString());  
注释掉看看。
------解决方案--------------------
如果你发现某种操作不会使“每ping一次内存都要增加个3m左右”了,那么要注意,许多操作应该“copy”PingCompletedEventArgs e返回的数据,而不是直接拿它的返回值传出去。