4

我正在使用异步套接字使用 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 和其他地方搜索这个,我发现了这个:

.NET 没有可靠的异步套接字通信?

但是,我真的不明白那里在讨论什么。

我还发现了这个:

https://www.codeproject.com/Articles/83102/C-SocketAsyncEventArgs-High-Performance-Socket-Cod

我读到套接字需要确认它何时已经在 BeginSend/EndSend 和 BeginReceive/EndReceive 之间发送数据,因为如果没有,它会等到这个,然后开始增加内存(直到检测到循环?)

也许通过我分享的 CodeProject 我应该得到这个?我不知道,我必须从哪里开始。

我需要一个指南。我将尝试分析 CodeProject。

4

0 回答 0