最近使用Boost.Flyweight测试了一下,真的是非常的节省内存。(在WINDOWS下面做的测试)
废话少说,直接上例子:
#include <boost/flyweight.hpp>
#include <string>
#include <vector>
using namespace std;
void LogUnitTest::flyweightTest()
{
char tmp[10];
vector< boost::flyweight<string> > boost_v;
for(int i =0;i< 10000000;i++)
{
sprintf(tmp,"zws_%d",i % 1000);
boost_v.push_back( boost::flyweight<string>( tmp ) );
}
Sleep( 7000 ); //有时间查看内存情况
return ;
}
void LogUnitTest::stlTest()
{
char tmp[10];
vector< string > stl_v;
for(int i =0;i< 10000000;i++)
{
sprintf(tmp,"zws_%d",i % 1000);
stl_v.push_back( (tmp) );
}
cout <<"========="<<endl;
Sleep( 7000 );
return ;
}
使用10000000是为了造成大数据量的情况,使用%1000是为了产生使用Flyweight的场景。
运行两个测试用例,第一个用了87M,第二个内存飙升到1G然后抛出bad_alloc异常。
试想一下,如果在电信级别的应用中,有100个字段,每个字段都有最多1000个取值,但是数据量又非常大的情况下,性能会有怎样的提升!
浙公网安备 33010602011771号