我正在使用异步套接字使用 MSDN Docs 在客户端和服务器之间建立连接:
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
没关系,它工作,但它有内存泄漏,我开始分析,我发现了这个:
(可能的内存泄漏)
(到处都有检测到循环的语句。我想知道它们的意思。我想应用程序或 GC 迫使它停止并将其标记为循环)。
我认为有些不对劲,因为如果您发送 1MB 的数据,内存应该只会增加 1MB,但稍后会减少。但这并没有发生。我开始在不引起异常的情况下处理所有内容,但这并没有太大帮助。
我开始在 StackOverflow 和其他地方搜索这个,我发现了这个:
但是,我真的不明白那里在讨论什么。
我还发现了这个:
https://www.codeproject.com/Articles/83102/C-SocketAsyncEventArgs-High-Performance-Socket-Cod
我读到套接字需要确认它何时已经在 BeginSend/EndSend 和 BeginReceive/EndReceive 之间发送数据,因为如果没有,它会等到这个,然后开始增加内存(直到检测到循环?)
也许通过我分享的 CodeProject 我应该得到这个?我不知道,我必须从哪里开始。
我需要一个指南。我将尝试分析 CodeProject。