c# - 在不安全的 c# 中使用 Ws2_32.dll 是否比使用 .net 套接字更快?

标签 c#

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

问题:

1) 在不安全环境中使用套接字是否可以提高性能?多少钱?

2) 当使用像这样的不安全方法时是否有 pinvoke 或数据编码命中(所有结构也不安全)

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。这就是真正的节流发生的地方。一个千兆以太网接口(interface)是常见的高端。与 CPU 处理数据的速度相比,这微不足道。即使是较慢的 RAM 总线也可以轻松地将数据移动速度提高 40 倍。更不用说连接到网络后实际建立连接所涉及的延迟。

这些路径由 ws2_32.dll 和 System.Net 采用。你应该测量它。我的预测是您看不到噪音中的信号。

关于c# - 在不安全的 c# 中使用 Ws2_32.dll 是否比使用 .net 套接字更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4294053/

相关文章:

c# - 文件夹浏览器对话框,如打开文件对话框

c# - Equals 和 GetHashCode 都不会在 IEqualityComparer 上被调用

C# 是否有 LINQ to HTML 或其他一些好的 .Net HTML 操作 API?

C# RSA 使用私钥解密

c# - 将 NotifyCollectionChangedAction.Replace 传递给 NotifyCollectionChangedEventArgs 失败

c# - SSIS C# 脚本不兼容

c# - StyleCop SA1650 在没有警告抑制的情况下将 URL 捕获为拼写错误的单词的解决方法

c# - 做编译绑定(bind)(x :Bind) require the ViewModel to derive from DependencyObject?

C# - 整数的正确验证

c# - EF 代码优先加密/解密密码属性