如何实现一个高性能的Socket后端 (C#,CSharp)

转载地址http://blog.sina.com.cn/s/blog_53b839dd0100pdg4.html
当你要创建一个对象,最好不要在事件监听函数,循环调用的函数中创建,因为只要函数体不释放,新创建的对象也永远不释放,结果造成内存泄露.
当你想用多线程去加速你的事务处理, 但你最好不要这么做,因为IOCP 已经实现了这功能,每一个接收到的Socket都是在一个独立的Thread运行的,如果再自行创建Thread,则会严重降低运行速度.

Thread的数量越多, CPU要花费更多时间在切换线程上.

如果你的计算逻辑和数据解析消耗了很大的性能,你应该考虑使用汇编语言去处理

c#为了支持各种不同的CPU结构,很多时候没有使用最新的CPU指令集,比如 SSE2,SSE3等.你可以在汇编使用这些指令去加快计算过程. (对c++编译器同样)

一个1字节的包和一个1KB的包传输过程中消耗的资源是一样的,因而对单个包进行压缩并不能提供性能.

把接受和发送的 byte[] 缓冲区大小设置为 1024,因为这是默认的TCP包大小.

事件(EventArgs),回调(AsyncCallBack),缓冲区(byte[])都应该重用,但要注意不要引起并发操作,解决办法是对每个接收到的Socket都对应独立的 事件(EventArgs)、回调(AsyncCallBack),以及缓冲区(byte[]).

你可能感兴趣的:(Socket)