私はメッセージルータを構築しており、可能な限り速くしたいと考えています。 私はC#4.0にとどまり、できるだけ早くソケットを使いたいと思っています。 すべてのデータを管理対象メモリに保存する必要はありません。私はバイト配列を取り扱っておりますし、(より良いオプションが発見されていない限り)、このメソッドを使用して管理するメモリにデータを持って来るのです :http://www.codeproject.com/KB/cs/ReadingStructuresEmit.aspx安全でないC#でWs2_32.dllを使用していますが、.NETソケットよりも高速ですか?
質問:
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の場合、データ処理が危険な状態で行われ、安全でないメソッドがデータを返さない場合は重要です(は何もありません)。マネージドにマーシャリングされた)?
私の考えでは、管理された<->の管理されていないコールは高価です。管理されたスペースにすべてのメッセージが必要なわけではないので、安全ではないかもしれません。 – Joe
* unsafe *キーワードでアンマネージコードにすることはできません。ネットワーキングAPIはあなた自身をピンボケしても、System.Netがそれをあなたに任せても、違いはありません。繰り返しますが、実際にこれを測定して自分自身を説得してください。 –