我正在从 Windows phone 8 中的流套接字中递归读取数据。它运行良好,但存在内存泄漏。即每次读取后内存大小都会增加。谁能告诉我这有什么问题?这是我的实现
public async Task ReadSocket(StreamSocket Socket)
{
try
{
uint intBytesRead;
var dataReader = new DataReader(Socket.InputStream);
dataReader.InputStreamOptions = InputStreamOptions.Partial;
intBytesRead = await dataReader.LoadAsync(4);
if (intBytesRead == 0)
{
OnDisconnect(Socket);
return;
}
while (intBytesRead < 4)
{
uint read = await dataReader.LoadAsync((uint)4 - intBytesRead);
if (read == 0)
{
OnDisconnect(Socket);
return;
}
intBytesRead += read;
}
byte[] data = new byte[4];
dataReader.ReadBytes(data);
int lenHTN = BitConverter.ToInt32(data, 0);
int length = CommonUtil.ConvertNToH(lenHTN);
if (length < 1)
{
OnDisconnect(Socket);
return;
}
data = new byte[length];
uint dataBytesRead = await dataReader.LoadAsync((uint)length);
if (dataBytesRead == 0)
{
OnDisconnect(Socket);
return;
}
while (dataBytesRead < length)
{
uint read = await dataReader.LoadAsync((uint)length - dataBytesRead);
if (read == 0)
{
OnDisconnect(Socket);
return;
}
dataBytesRead += read;
}
dataReader.ReadBytes(data);
Debug.WriteLine("Check Memory Status");
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
if (SocketError.GetStatus(ex.HResult) == SocketErrorStatus.ConnectionResetByPeer)
{
OnDisconnect(Socket);
return;
}
}
await ReadSocket(Socket);
}
这是输出
Check Memory Status
当前:25MB 限制:314MB
检查内存状态 当前:25MB 限制:314MB
检查内存状态 当前:25MB 限制:314MB
检查内存状态 当前:25MB 限制:314MB
检查内存状态 当前:26MB 限制:314MB
检查内存状态 当前:26MB 限制: 314MB
检查内存状态当前:27MB 限制:314MB
检查内存状态当前:27MB 限制:314MB
检查内存状态当前:27MB 限制:314MB
。. .
检查内存状态当前:72MB 限制:314MB
检查内存状态当前:72MB 限制:314MB
。. 由于内存不足,它会一直持续到应用程序崩溃。