青岛网站建设方案书,网站设计与网页制作心得体会,公司网站优化推广,织梦网站建设后优化步骤背景
使用Asp.Net Core Web Api框架开发网站中使用到了tcp socket通信#xff0c;网站作为服务端开始tcp server#xff0c;其他的客户端不断高速给它传输信息时#xff0c;tcp server中读取信息每次申请的byte[]没有得到及时的释放#xff0c;导致内存浪费越来越多#…背景
使用Asp.Net Core Web Api框架开发网站中使用到了tcp socket通信网站作为服务端开始tcp server其他的客户端不断高速给它传输信息时tcp server中读取信息每次申请的byte[]没有得到及时的释放导致内存浪费越来越多最终内存溢出系统崩溃。
示例代码
Socket server new Socket(SocketType.Stream, ProtocolType.Tcp);
IPAddress iPAddress IPAddress.Parse(127.0.0.1);
IPEndPoint iPEndPoint new IPEndPoint(iPAddress, 8080);
server.Bind(iPEndPoint);
server.Listen(3);
Task.Run(()
{Task.Run(() {while (true){Socket client server.Accept();while (true){byte[] buffer new byte[client.ReceiveBufferSize];int length client.Receive(buffer);if (length 0){string str Encoding.ASCII.GetString(buffer, 0, length);Console.WriteLine(str);}else{client.Shutdown(SocketShutdown.Both);client.Close();client.Dispose();break;}}}});
});Console.ReadLine();
客户端使用网络调试助手进行模拟
结论
同样的代码使用纯控制台项目框架搭建则正常引发GC每次申请的buffer数组都得到及时的释放。 而使用Asp.Net Core Web Api框架搭建的项目中跑这个服务端代码则是这样的很少引发GC没有及时回收buffer数组的无效内存空间 解决方案
右键项目文件-编辑它 PropertyGroup属性中添加一个子属性保存重新启动项目
ServerGarbageCollectionfalse/ServerGarbageCollection 再次观察GC引发的频率和内存使用状况可以发现内存没有继续暴增了 GC模式
已经有大佬总结再次不多赘述
讨论.NET Core 配置对GC 工作模式与内存的影响 - YOYOFx - 博客园 (cnblogs.com)