.net Socket构造函数是分配更多内存列表的函数中最重要的一个,为什么?
我正在开发一个.NET框架来开发点对点应用程序。在上一个版本中,我使用APM模式(BeginXXX/EndXXX)实现了这一点,它工作得非常好。我的意思是,我用VS profiler进行了测量,结果是预期的,没有意外 目前我正在更新它,以使用.NET3.5中引入的高性能改进,它是XXXAsync。该框架工作正常,但是,当我看到分析器的结果(关于内存使用)时,套接字构造函数是“分配最多内存的函数”中排名第一的.net Socket构造函数是分配更多内存列表的函数中最重要的一个,为什么?,.net,sockets,memory,profiling,.net,Sockets,Memory,Profiling,我正在开发一个.NET框架来开发点对点应用程序。在上一个版本中,我使用APM模式(BeginXXX/EndXXX)实现了这一点,它工作得非常好。我的意思是,我用VS profiler进行了测量,结果是预期的,没有意外 目前我正在更新它,以使用.NET3.5中引入的高性能改进,它是XXXAsync。该框架工作正常,但是,当我看到分析器的结果(关于内存使用)时,套接字构造函数是“分配最多内存的函数”中排名第一的 只是一个旁白:我希望第二个,connectioniactor,会是最上面的一个,因为它创
只是一个旁白:我希望第二个,connectioniactor,会是最上面的一个,因为它创建了一个新的字节[1内存分配是由System.Net.Socket构造函数使用的System.Net.Logging造成的。禁用System.Net Logging可能会有所帮助。我不必担心。你能计算出创建了多少个Socket对象吗?这将是我的下一步。第二:事实上,我有一个性能计数器,它每分钟递增一次me接受新连接(即使是冗余计数器-系统已提供)好的,这看起来非常奇怪。你能用一个简短但完整的程序来复制这个吗?我必须这样做,我知道。我会做的,然后带着它回来。我希望能复制它。它实际分配了多少字节?它可能是一个高百分比,但在总体方案中仍然不是那么多。。
using System.Net;
using System.Net.Sockets;
namespace SocketMemeoryTest
{
class Listener
{
static void Main()
{
var forComparison = new byte[100*1024];
new Listener(3453).Start();
}
private readonly IPEndPoint _endpoint;
private readonly Socket _listener;
public Listener(int port)
{
_endpoint = new IPEndPoint(IPAddress.Any, port);
_listener = new Socket(_endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
}
public void Start()
{
_listener.SetIPProtectionLevel(IPProtectionLevel.Unrestricted);
_listener.Bind(_endpoint);
_listener.Listen(4);
var saea = new SocketAsyncEventArgs();
var async = _listener.AcceptAsync(saea);
}
}
}