z3n*_*10n 6 c# sockets memory-leaks heap-profiling
我正在使用异步套接字使用 MSDN 文档在客户端和服务器之间建立连接:
https://msdn.microsoft.com/en-us/library/fx6588te(v=vs.100).aspx
https://msdn.microsoft.com/en-us/library/bew39x2a(v=vs.100).aspx
我开始使用同步,后来使用异步。成功完成第一个应用程序后,我开始在 GitHub 存储库中搜索更多代码和更多解释。我找到了这个:
https://github.com/perrybutler/csharpsockets
没关系,它可以工作,但是它有内存泄漏,我开始分析,我发现了这一点:
(可能存在内存泄漏)
(随处可见 Cycle Detected 语句。我不知道它们的意思。我想应用程序或 GC 强制它停止并将其标记为 Cycle)。
我认为有些问题,因为如果你发送 1MB 的数据,内存应该只增加 1MB,但后来会减少。但这并没有发生。我开始在不引发异常的情况下处理所有内容,但这并没有多大帮助。
我开始在 StackOverflow 和其他地方搜索这个,我发现了这个:
但是,我不太明白那里正在讨论什么。
我还发现了这个:
https://www.codeproject.com/Articles/83102/C-SocketAsyncEventArgs-High-Performance-Socket-Cod
我读到套接字需要确认何时已经在 BeginSend/EndSend 和 BeginReceive/EndReceive 之间发送数据,因为如果没有,它将等待这一点,并开始增加内存(直到检测到周期?)
也许通过我分享的 CodeProject 我应该得到这个?我不知道,我必须从哪里开始。
我需要一个指南。我将尝试分析 CodeProject。
小智 0
我遇到了同样的问题,我的错误代码:
NetworkStream stream = client.GetStream();
stream.Write(data, 0, data.Length);
Run Code Online (Sandbox Code Playgroud)
固定代码:
using (NetworkStream stream = client.GetStream())
{
stream.Write(data, 0, data.Length);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2552 次 |
| 最近记录: |