我的程序一直是这样工作的。char *buf=new char[2359296];//2.25M 没办法这个必须要这么大
int len;
for (;;)
{
GetChange(buf,&len); //这是一个堵塞函数,没变化就挂起,有变化就立刻返回数据
char *dat=new char[len];//因为变化的数据可能没有2.25M这么大 所以新建一个内存
memcpy(dat,buf,len);
::PostThreadMessage(Sid,MY_US,(WPARAM)dat,(LPARAM)len);//为了不影响立即获得新变化数据,所以只能把变化的数据 交给另1条线程处理。
}//这是另1条线程
/*得到MY_US消息后处理 数据,完了后:*/
delete dat; //释放最近要优化程序,因为这样平凡的分配内存对性能不好!我应该采用什么技术? 我一直想不用重新new memcpy了,而想使用内存池管理buf,直接用buf,但是2.25M的内存是不是太大了,而且返回的数据可能只有几K。(因为有时候在前1个数据没有处理完,后面的变化都有10多次了,那么内存池里就有几十M),如果对dat使用内存池,那么内存占用大的问题解决了,但是就多了一条memcpy。
什么技术能解决呢?
int len;
for (;;)
{
GetChange(buf,&len); //这是一个堵塞函数,没变化就挂起,有变化就立刻返回数据
char *dat=new char[len];//因为变化的数据可能没有2.25M这么大 所以新建一个内存
memcpy(dat,buf,len);
::PostThreadMessage(Sid,MY_US,(WPARAM)dat,(LPARAM)len);//为了不影响立即获得新变化数据,所以只能把变化的数据 交给另1条线程处理。
}//这是另1条线程
/*得到MY_US消息后处理 数据,完了后:*/
delete dat; //释放最近要优化程序,因为这样平凡的分配内存对性能不好!我应该采用什么技术? 我一直想不用重新new memcpy了,而想使用内存池管理buf,直接用buf,但是2.25M的内存是不是太大了,而且返回的数据可能只有几K。(因为有时候在前1个数据没有处理完,后面的变化都有10多次了,那么内存池里就有几十M),如果对dat使用内存池,那么内存占用大的问题解决了,但是就多了一条memcpy。
什么技术能解决呢?
2.就是开一个很大的内存(这个可以根据实际情况来定,如果大部分都是10K或者更小,则可以分配10M,然后自己重载new和delete,让其分配内存的时候,是从你的内存中分配的,这样比较合理