大家好,最近忙了一阵没有来。
最近写了一个的程序有一下特点
1,我用VC2003,需要频繁调用new和delete。new出来的内存一般都在几十个字节。
2,new出来的内存可能缓存在系统中达到百万个。
3,程序用了STL的map等进行缓存和快速查找。(多线程)特向大家请教和探讨一下问题:
1,在编译参数上应该如何设置,才可是的new和delete的性能比较高?
2,VC2003自带的STL是否线程安全?是否需要改成STLPort的库?小弟自己的见解:
应该在编译器上设置大的堆。可以提高new和的delete大量的小内存的性能。第二个问题似乎不太安全,请问那位兄弟试验过同类问题的,给点建议。

解决方案 »

  1.   

    声明一个公共变量,不用每次new,delete
    第二个没试过
      

  2.   

    使用自定义堆HeapCreate.然后在自定义的堆中new
      

  3.   

    建议用VirtualAlloc保留/提交内存
      

  4.   

    如果new/delete成了性能上的瓶颈,应该考虑memory pool.
      

  5.   

    感谢大家参与,
    DentistryDoctor(不在无聊中无奈,就在沉默中变态) 的条件说的好,“如果new/delete成了瓶颈”,现在我还不能确定是否成瓶颈,1小时处理1百万次new delete应该没有什么问题的吧。VC2003中的不是线程安全,因为时间紧,就没有换成STLPort了,先自己加上线程同步。明天实际运行看看,机器是否受得了。
      

  6.   

    频繁new和delete,在windows上面的话不出一天就会报虚拟内存不足。
      

  7.   

    如果是类似于服务器程序类型的程序的话就不尽量不要new delete吧?虽然你可能很好的保证每组都合适的删除,但是稍微有点疏忽的话服务器运行一两天就崩溃~
      

  8.   

    如果是类似于服务器程序类型的程序的话就不尽量不要new delete吧?虽然你可能很好的保证每组都合适的删除,但是稍微有点疏忽的话服务器运行一两天就崩溃~
    ------------------------------
    实现自己的pool就可以用
      

  9.   

    同志们,新年好啊。小系统经过验证,new delete还是没有瓶颈。不过后来还是改成了一个巨大的数组【100000】,加上map来访问,运行还是比较稳定。每秒除以几千条消息包没有问题。