المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : SerialPort has memory leak



C# Programming
08-26-2010, 12:30 AM
Hi Guys,

I had windows service that will listen to a COM port and somehow after run for hours, memory leak start happening.

So I created 2 simple programs.

First one, send a data through COM2 (Console):

private static byte[] serialBuffer = new byte[1];
static SerialPort sPort = new SerialPort();
static void Main(string[] args)
{
sPort.PortName = "COM2";
sPort.Open();

string data= String.Empty;
int startNumber = 100000;
while (startNumber < 1)
{
data = DateTime.Now.ToString("dd MM yy hh mm ss");
data = data + " " + data + " " + data;

byte[] tmp = HexStringToByteArray(data);
sPort.Write(tmp, 0, tmp.Length);

Thread.Sleep(500);
startNumber--;
}
}

private static byte[] HexStringToByteArray(string s)
{
s = s.Replace(" ", "");
byte[] buffer = new byte[s.Length / 2];
for (int i = 0; i < s.Length; i += 2)
buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
return buffer;
}

Next one is the receiving part and write back to COM1 port (Windows form):

SerialPort _serialPort = new SerialPort();
public Form1()
{
InitializeComponent();
_serialPort.PortName = "COM1";
_serialPort.Open();
_serialPort.DataReceived += new SerialDataReceivedEventHandler(tccuSerialPort_DataReceived);
}

byte[] serialBuffer = new byte[1];
private void tccuSerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int bytesToRead = _serialPort.BytesToRead;
if (bytesToRead > 256)
bytesToRead = 256;

if (bytesToRead > 0)
{
serialBuffer = new byte[bytesToRead];
_serialPort.Read(serialBuffer, 0, bytesToRead);
listBox1.Items.Add("RECEIVED");
_serialPort.Write(new byte[1] { 0x01 }, 0, 1);
}
serialBuffer = null;
}
When I run the programs, the 2nd program's memory start to leak. (receiving program)
I have no idea if anybody encounter this problem before? can provide some advice?

Thanks in advance.