不安全的c#中的32.dll比使用.net套接字更快?

我正在构建一个消息路由器,并希望它尽可能快。 我想留在C#4.0中,并希望尽可能快地使用套接字。 我可能不需要将所有数据放入托管内存中。 我正在处理字节数组,并使用此方法将数据带入托管内存(除非找到更好的选项):http://www.codeproject.com/KB/cs/ReadingStructuresEmit.aspx

问题:

1)在不安全的情况下使用套接字是否会有性能提升? 多少?

2)使用这样的不安全方法时是否存在拼写或数据编组冲突(所有结构都不安全)

public unsafe partial class Native 

{

    [DllImport("Ws2_32.dll")]
    public static extern int connect(SOCKET s, sockaddr_in* addr, int addrsize);

}

3)对于#2,数据处理是否发生在不安全的情况下,以及何时不安全的方法返回,没有数据被返回(这样可能没有任何东西被编组为管理的),这有什么关系?


这些改进不能产生任何可衡量的效果。 真正的工作是在内核模式下完成的,即TCP / IP驱动程序堆栈中的许多层。 那里有很多代码想要嗅探IRP数据包。 最终它击中NIC。 这就是真正的节流发生的地方。 一个千兆以太网接口是常见的高端产品。 这与花生相比,CPU可以铲除数据。 即使是缓慢的RAM总线也能轻松将数据移动40倍。 不要说实际上在连接到网络时发生延迟。

这些路径是由ws2_32.dll以及System.Net。 你应该测量它。 我的预测是,你看不到噪音的信号。


任何包装都会引入开销,所以是的,P /直接调用套接字库会更快。 问题是速度要快多少。

您是否尝试过对每种方法进行基准测试,并查看哪种性能更好 这将是一个很好的方法来确定这一点。 如果性能差异可以忽略不计,那么坚持托管套接字类并保持代码可读性会更好。

链接地址: http://www.djcxy.com/p/79185.html

上一篇: 32.dll in unsafe c# faster than using .net sockets?

下一篇: In C#, why is String a reference type that behaves like a value type?