c# - Implement Dispose to my method -


i have winform application uses pcapdot.net dlls , plays pcap files. when playing file in loop can see application memory raised until crash occurs , in stack trace can see happens in method plays file. thinking add dispose method , see if can solve crash.

so added class variable private bool _disposed;

and methods:

public void dispose() {     dispose(true); }  private virtual void dispose(bool disposing) {     if (!_disposed)     {         if (disposing)         {          }          _disposed = true;     } } 

my play method:

public bool sendbuffer(packetdevice packetdevice)         {             int count = 0;             bool bcontinueplay = true;             packetdevice selectedoutputdevice = packetdevice;             _shouldcontinue = true;             _isstop = true;             _stopbutton = true;              offlinepacketdevice selectedinputdevice = new offlinepacketdevice(_filepath.fullname); //open capture file             datetime time = datetime.now;             double totaltime = 0;             double totaldelaytime = 0;             double deletatime = 0;              using (inputcommunicator = selectedinputdevice.open(65536, packetdeviceopenattributes.promiscuous, 1000))             {                 using (outputcommunicator = selectedoutputdevice.open(100, packetdeviceopenattributes.promiscuous, 1000))                 {                     threadstart tstarter = delegate { openadapterforstatistics(selectedoutputdevice); };                     thread thread = new thread(tstarter);                     thread.isbackground = true;                     thread.start();                      datetime lasttime = datetime.minvalue;                     double delaytime = 0;                     packet packet;                     ienumerable<packet> packets;                      while (inputcommunicator.receivepacket(out packet) == packetcommunicatorreceiveresult.ok && _isstop) //fill buffer packets file                     {                         if (count < _numberofpacketsinfile)                         {                             using (packetsendbuffer msendbuffer = new packetsendbuffer((uint)packet.length * 4))                             {                                 if (_isburst)                                 {                                     if (lasttime != datetime.minvalue)                                     {                                         if (packet != null)                                         {                                             delaytime = (packet.timestamp.subtract(lasttime).totalmilliseconds) / _playspeed; //delay between packets                                         }                                          if (delaytime > 1000)                                         {                                             if (_starttimer != null)                                             {                                                 _starttimer(delaytime, eventargs.empty);                                             }                                              _delayfornextpacket = delaytime;                                         }                                          totaldelaytime += delaytime;                                         delaytime = delaytime - deletatime;                                          if (delaytime < 0)                                         {                                             delaytime = 0;                                         }                                          if (evepacketprogress != null)                                         {                                             int packetprogressprecentage = (int)(((double)_numberofsendpackets / _numberofpacketsinfile) * 100);                                             evepacketprogress(packetprogressprecentage);                                         }                                          _mrevent.waitone((int)delaytime);                                          if (_stoptimer != null)                                         {                                             _stoptimer(delaytime, eventargs.empty);                                         }                                     } //end if                                 } // end if _brust                                                                                                                             if (_fragmentation)                                 {                                     foreach (packet item in splitpacket(packet, 1))                                     {                                         msendbuffer.enqueue(item);                                     }                                 }                                 else if (packet != null)                                 {                                     lasttime = packet.timestamp;                                     msendbuffer.enqueue(packet);                                 }                                  if (evepacketprogress != null)                                 {                                     int packetprogressprecentage = (int)(((double)_numberofsendpackets / _numberofpacketsinfile) * 100);                                     evepacketprogress(packetprogressprecentage);                                 }                                  try                                 {                                     outputcommunicator.transmit(msendbuffer, _isburst); //send packet                                     _numberofsendpackets++;                                 }                                 catch (exception)                                 {                                  }                             }///                              totaltime = datetime.now.subtract(time).totalmilliseconds;                             deletatime = totaltime - totaldelaytime;                             count++;                         }                     } //end while                 }             }              return bcontinueplay;         } 

the crash occur in line datetime lasttime = datetime.minvalue;

i new developer , not know how proceed here. welcome

the dispose method used free unmanaged resources, in other words, isn't in ".net world", tcp or database connection.

when clr finds program running out of memory, automaticaly invokes garbage collector, free objects not using anymore.

you need implement idisposable if have free unmanaged resources. details implementing idisposable, can find lot of articles online. instace, forgeting of implement class finalizer.

so, if problem in method play files, must first find causing memory increase , cannot released gc.

i don't know pcapdot.net, try find method releasing file being played, or this. maybe don't need implement idisposable, add call method.


Comments

Popular posts from this blog

jquery - How can I dynamically add a browser tab? -

node.js - Getting the socket id,user id pair of a logged in user(s) -

keyboard - C++ GetAsyncKeyState alternative -