解决方案 »

  1.   

    一开始不申请那么多socket试试
      

  2.   

    在程序初始化时直接初始化了2万个socket
    lz是怎么做的?没有连接进入的时候,弄那么多干嘛?
      

  3.   

    申请2w个socket这个太奇葩了,改了吧。VirtualAlloc是按4K对齐分配内存,也就是说你申请1字节也是占用4k,申请4000字节也是4k,按需分配吧,你这看来内存资源不够用。。不确定你是啥原因导致内存分配失败的,出问题时自己看看内存占用情况呗。
      

  4.   


    同意楼上讲的,IOCP初始化完成后先进行AcceptEx投递,不需要初始化那么多的socket。
    AcceptEx投递完成后,继续再投递就可以保证接入,
    要优化还可以考虑reuse而不是close,但这个不是必须的。
    内存频繁申请肯定要用内存池,boost库的没有用过,按道理不应该出现这个问题,
    会不会是内存释放处理的有问题,可以重点跟下资源回收。
    几百个连接就会出问题明显是业务处理的问题,IOCP的能力不止这点
      

  5.   

    to 2 楼 oyljerry
    嗯,申请那么多确实是不好,现在是每投递一个Accept申请一个socket
    to worldy
    和刚开始需求有关,当时服务器计划做的是短链接,收发几个包就断开,频繁的申请socket会大大降低性能。改需求后没考虑这边导致了现在的这个情况,已经改掉了~
      

  6.   

    最终问题解决了,用的单向链表内存池。但是在频繁的使用VirtualAlloc分配内存时还是会出错,改成HeapAlloc后好了。还是不明白为什么。