本帖最后由 lsjwq 于 2012-07-10 10:35:32 编辑

解决方案 »

  1.   

    对于这个问题我是这样解决的:模拟一个线程池。这个线程池是动态的公用的。产生握手信号时,并不马上生成新线程,二是把相关信息存储起来(static list or db)直到传输数据时才产生新线程,等数据传输完毕后判断线程总数,如果没达到线程池阙值则本线程并不销毁回收,而是等待下次相同的握手信号做二次复用(这样的好处是能最大限度够避免线程建立和销毁对系统性能产生的影响)。如果达到了线程池的阙值,那么就需要按照一定的策略来回收(销毁)线程。至于使用怎么样的回收策略可以根据具体业务来决定。
      

  2.   

    http://topic.csdn.net/u/20120614/23/52e322d7-1ddd-4c8e-ae68-756e121d07ff.html
      

  3.   


    楼上的搞清楚udp,tcp的区别了么?没事别瞎参合。本来我对北大青鸟还不是很厌恶,要是老碰到你这样的就难说了。
      

  4.   

    还不理想,那就换SocketAsyncEventArgs吧
      

  5.   

    使用异步模式(BeginXXXXXXXX),.net 自动使用完成端口模式。通信量不大(指网络和CPU都未满载),2万个连接都没问题。
      

  6.   


    知道啊
    但SocketAsyncEventArgs的优势不在异步,也不线程操作
    而在资源的重复使用我继续参合
      

  7.   

    光使用BeginReceive来完成?
    还是 BeginReceive + 自定义委托的异步?我这个分两步操作,第一步,接收数据头内容,第二,接收正式文本内容
      

  8.   


    我用的VS2005,没有SocketAsyncEventArgs这个吧。
      

  9.   

    说的有理,SocketAsyncEventArgs可以避免每次都去申请内存,提高内存使用率可以比BeginXXX跟高效些
    若是使用.NET20的话,那就使用BeginXXX,它的IO模型是完成端口,去使用系统的线程池。