青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 7,  comments - 64,  trackbacks - 0

記得以前在一本書上看過(guò)boost::shared_ptr的回帶來(lái)一定的效率損失,但是并不大.今天閑來(lái)無(wú)事,編譯了一個(gè)BOOST并簡(jiǎn)單測(cè)試了一下,看看到底有多少性能損失.測(cè)試代碼和結(jié)果如下:

比較函數(shù)
template <class T>
class compareP
{
public:
        bool operator() (const T lh,const T rh) const
        {
                return *lh<*rh;
        }

};


boost:
int _tmain(int argc, _TCHAR* argv[])
{
        DWORD oldtime = GetTickCount();
        typedef map<boost::shared_ptr<string>,size_t,compareP<boost::shared_ptr<string> > > container_type;
        typedef container_type::iterator iterator;
        container_type container;
        for (size_t i(0) ; i<500000 ; ++i)
        {
                boost::shared_ptr<string> pstr(new string);
                char buffer[32];
                *pstr = itoa(i,buffer,10);
                container[pstr]=0;
        }
        cout<<GetTickCount() - oldtime <<endl;
return EXIT_SUCCESS;
}

boost結(jié)果:
2000
2015
2015
2016
2017


指針:
int _tmain(int argc, _TCHAR* argv[])
{
        DWORD oldtime = GetTickCount();
        typedef map<string*,size_t,compareP<string*> > container_type;
        typedef container_type::iterator iterator;
        container_type container;
        for (size_t i(0) ; i<500000 ; ++i)
        {
                string *pstr = new string;
                char buffer[32];
                *pstr = itoa(i,buffer,10);
                container[pstr]=0;
        }
        cout<<GetTickCount() - oldtime <<endl;
return EXIT_SUCCESS;
}

指針結(jié)果:
937
938
954
953
953

執(zhí)行速度已經(jīng)相差一倍了.自動(dòng)內(nèi)存管理的代價(jià)啊!~~~~
環(huán)境:Q8200 2.33GHZ 4G內(nèi)存

以上只是簡(jiǎn)單的測(cè)試,僅拱參考


補(bǔ)充說(shuō)明:

很多朋友流言說(shuō)在MAP中存放string*沒(méi)有意義。可是我上一個(gè)項(xiàng)目就需要這么做。

試想我現(xiàn)在有10篇文檔,現(xiàn)在需要統(tǒng)計(jì)每篇文檔當(dāng)中每個(gè)字出現(xiàn)的次數(shù),還需要統(tǒng)計(jì)全部文章中全部字出現(xiàn)的次數(shù)。為了保證效率,應(yīng)當(dāng)保證每個(gè)字在內(nèi)存當(dāng)中只留一份拷貝(因?yàn)橐院笥锌赡芙y(tǒng)計(jì)每個(gè)詞,甚至每句話出現(xiàn)的次數(shù))。要實(shí)現(xiàn)這個(gè)功能,是否還有更好的算法?


還有朋友流言說(shuō)指針版沒(méi)有銷毀string指針。可是在這個(gè)程序中執(zhí)行cout<<GetTickCount() - oldtime <<endl;之前shared_ptr也沒(méi)有釋放資源。所以資源的釋放不會(huì)造成誤差。

luck朋友的方法最為有效,把比較函數(shù)變成:

bool operator() (const T &lh,const T &rh) const

        {

                return *lh<*rh;

        }

下面是shared_ptr執(zhí)行5次的時(shí)間:

968

969

985

969

969


下面是string*執(zhí)行5次的時(shí)間:

859

875

860

859

860


看來(lái)即使是小對(duì)象也不能放松!當(dāng)很多小對(duì)象發(fā)生構(gòu)造和析構(gòu)時(shí)所耗費(fèi)的時(shí)間還是不容小視的!~

posted on 2009-06-30 21:09 HIT@ME 閱讀(3844) 評(píng)論(14)  編輯 收藏 引用

FeedBack:
# re: 關(guān)于boost庫(kù)中shared_ptr執(zhí)行速度的簡(jiǎn)單測(cè)試
2009-06-30 21:35 | skyscribe
你舉的這個(gè)例子不具有典型性,實(shí)際中寫出這樣的代碼,應(yīng)該是需要再好好斟酌,誰(shuí)會(huì)把shared_ptr作為map的索引呢?
應(yīng)該舉一個(gè)更切合實(shí)際的例子,譬如map的第二個(gè)字段是shared_ptr類型。
另外你的代碼有沒(méi)有把所有的優(yōu)化都用上,強(qiáng)迫inline展開?  回復(fù)  更多評(píng)論
  
# re: 關(guān)于boost庫(kù)中shared_ptr執(zhí)行速度的簡(jiǎn)單測(cè)試
2009-06-30 23:31 | HIT@ME
我最近做的一個(gè)項(xiàng)目就需要把string*作為map的索引(比如統(tǒng)計(jì)文章中重復(fù)出現(xiàn)的單詞數(shù))。另外,是否強(qiáng)迫inline展開并不重要。因?yàn)橹饕f(shuō)明shared_ptr確實(shí)對(duì)效率有影響,不是為了加快整個(gè)程序的執(zhí)行效率。
明天我去公司再試試看把map換成vector,不過(guò)估計(jì)結(jié)果也差不多~@skyscribe
  回復(fù)  更多評(píng)論
  
# re: 關(guān)于boost庫(kù)中shared_ptr執(zhí)行速度的簡(jiǎn)單測(cè)試
2009-07-01 08:49 | 遠(yuǎn)古毛利人
樓主是否在Release下測(cè)試的?  回復(fù)  更多評(píng)論
  
# re: 關(guān)于boost庫(kù)中shared_ptr執(zhí)行速度的簡(jiǎn)單測(cè)試
2009-07-01 08:50 | Kevin Lynx
這個(gè)測(cè)試?yán)哟_實(shí)有問(wèn)題。把一個(gè)對(duì)象(shared_ptr)和一個(gè)指針(string*)分別作為map的key,對(duì)象肯定會(huì)比指針慢。對(duì)象用于map的key會(huì)涉及到很多復(fù)制操作。  回復(fù)  更多評(píng)論
  
# re: 關(guān)于boost庫(kù)中shared_ptr執(zhí)行速度的簡(jiǎn)單測(cè)試
2009-07-01 09:10 | null
想不出來(lái)你為什么要用(string*)做key,既然用了指針,那肯定不是為了排序,如果是為了查找,那應(yīng)該用hash_map(boost::unordered_map)  回復(fù)  更多評(píng)論
  
# re: 關(guān)于boost庫(kù)中shared_ptr執(zhí)行速度的簡(jiǎn)單測(cè)試
2009-07-01 09:29 | zuhd
用指針做key有什么意義呢?它和int做索引有什么區(qū)別?  回復(fù)  更多評(píng)論
  
# re: 關(guān)于boost庫(kù)中shared_ptr執(zhí)行速度的簡(jiǎn)單測(cè)試
2009-07-01 14:34 | test
主要是你的那個(gè)字符串太小了,相比較shared_ptr的構(gòu)造計(jì)數(shù)等動(dòng)作耗時(shí)差不多。所以才會(huì)差一倍。  回復(fù)  更多評(píng)論
  
# re: 關(guān)于boost庫(kù)中shared_ptr執(zhí)行速度的簡(jiǎn)單測(cè)試
2009-07-02 11:42 | luck
指針版的沒(méi)有銷毀string的指針  回復(fù)  更多評(píng)論
  
# re: 關(guān)于boost庫(kù)中shared_ptr執(zhí)行速度的簡(jiǎn)單測(cè)試
2009-07-02 17:52 | luck
把compareP類的操作符bool operator() (const T lh,const T rh) const
的參數(shù)改為引用傳遞就會(huì)減少很大部分的差別  回復(fù)  更多評(píng)論
  
# re: 關(guān)于boost庫(kù)中shared_ptr執(zhí)行速度的簡(jiǎn)單測(cè)試
2009-07-03 13:47 | 唐新發(fā)
下面的測(cè)試顯示shared_ptr相對(duì)于使用原始指針會(huì)慢上很多(2-4倍),主要是來(lái)自引用計(jì)數(shù)及其帶來(lái)的指針對(duì)象的創(chuàng)建銷毀時(shí)間,下面的測(cè)試代碼都是指針創(chuàng)建及傳遞操作:

#include <windows.h>
#include <cassert>
#include <iostream>
#include <string>
#include <boost/shared_ptr.hpp>

typedef int type;
typedef type* raw_ptr_type;
typedef boost::shared_ptr<type> shared_ptr_type;

template<typename T>
void use(T ptr)
{
T ptr1 = ptr;
T ptr2 = ptr;
T ptr3 = ptr;
}

int main(int argc, char* argv[])
{
size_t count = 500000;

if(argc > 1)
count = atoi(argv[1]);

DWORD oldtime, shared_ptr_time, raw_ptr_time;

{
oldtime = GetTickCount();
for (size_t i = 0; i < count ; ++i)
{
raw_ptr_type ptr(new type);
use(ptr);
delete ptr;
}
raw_ptr_time = GetTickCount() - oldtime;
}

{
oldtime = GetTickCount();
for (size_t i = 0; i < count ; ++i)
{
shared_ptr_type ptr(new type);
use(ptr);
}
shared_ptr_time = GetTickCount() - oldtime;
}

assert(raw_ptr_time <= shared_ptr_time);

std::cout << "count(" << count << ") raw_ptr(" << raw_ptr_time << " ms) shared_ptr(" << shared_ptr_time << " ms) diff(+" << shared_ptr_time - raw_ptr_time << " ms, +" << double(shared_ptr_time - raw_ptr_time)/double(raw_ptr_time)*100 << "%)"<< std::endl;

return EXIT_SUCCESS;
}

vc2008下 Release 禁用優(yōu)化的三次執(zhí)行:
count(500000) raw_ptr(110 ms) shared_ptr(591 ms) diff(+481 ms, +437.273%)
count(500000) raw_ptr(110 ms) shared_ptr(471 ms) diff(+361 ms, +328.182%)
count(500000) raw_ptr(120 ms) shared_ptr(471 ms) diff(+351 ms, +292.5%)

vc2008下 Release  完全優(yōu)化的三次執(zhí)行:
count(500000) raw_ptr(111 ms) shared_ptr(330 ms) diff(+219 ms, +197.297%)
count(500000) raw_ptr(100 ms) shared_ptr(331 ms) diff(+231 ms, +231%)
count(500000) raw_ptr(110 ms) shared_ptr(351 ms) diff(+241 ms, +219.091%)
  回復(fù)  更多評(píng)論
  
# re: 關(guān)于boost庫(kù)中shared_ptr執(zhí)行速度的簡(jiǎn)單測(cè)試
2009-07-04 16:28 | 99讀書人網(wǎng)上書城
這個(gè)測(cè)試?yán)哟_實(shí)有問(wèn)題  回復(fù)  更多評(píng)論
  
# re: 關(guān)于boost庫(kù)中shared_ptr執(zhí)行速度的簡(jiǎn)單測(cè)試
2009-07-05 22:50 | 李錦俊
堆中申請(qǐng)內(nèi)存和銷毀內(nèi)存是極為耗時(shí)的。應(yīng)該把測(cè)試做得更單純一點(diǎn)才對(duì)。  回復(fù)  更多評(píng)論
  
# re: 關(guān)于boost庫(kù)中shared_ptr執(zhí)行速度的簡(jiǎn)單測(cè)試
2011-03-26 12:54 | 張立斌
for (size_t i(0) ; i<500000 ; ++i)
{
boost::shared_ptr<string> pstr(new string);
char buffer[32];
*pstr = itoa(i,buffer,10);
container[pstr]=0;
//shared_ptr在此處釋放內(nèi)存
}
for (size_t i(0) ; i<500000 ; ++i)
{
string *pstr = new string;
char buffer[32];
*pstr = itoa(i,buffer,10);
container[pstr]=0;
//內(nèi)存泄露
}
如果不信,你可以把string改為自定義的類,并在構(gòu)造和析構(gòu)函數(shù)中加入輸出。  回復(fù)  更多評(píng)論
  
# re: 關(guān)于boost庫(kù)中shared_ptr執(zhí)行速度的簡(jiǎn)單測(cè)試
2012-08-30 01:43 | qindh
我測(cè)試了share_ptr版式1847,new delete版是104,測(cè)試是用的VS2010版本,share_ptr不是用的boost庫(kù),是用的VS2010自帶的  回復(fù)  更多評(píng)論
  

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


<2012年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用鏈接

留言簿(5)

隨筆檔案

test

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲午夜精品17c| 亚洲韩国青草视频| 欧美一区二区视频网站| 国产人成精品一区二区三| 欧美在线视频在线播放完整版免费观看| 午夜精品国产更新| 亚洲高清久久网| 国产欧美日韩视频| 国产综合香蕉五月婷在线| 欧美日韩国产不卡在线看| 久久激情五月激情| 一本大道久久a久久精品综合| 久久久久国产精品www| 夜夜爽www精品| 亚洲激情成人| 亚洲午夜精品久久久久久app| 亚洲小视频在线观看| 亚洲综合第一页| 一本久道综合久久精品| 亚洲欧美一区二区激情| 久久九九国产精品| 亚洲国产天堂久久综合| 国产一区二区精品| 国产精品对白刺激久久久| 免费观看成人鲁鲁鲁鲁鲁视频 | 毛片一区二区三区| 欧美一区二区视频在线| 亚洲网在线观看| 亚洲图中文字幕| 久久久亚洲欧洲日产国码αv| 欧美一区二区高清| 欧美精品一区在线播放| 欧美精品v日韩精品v韩国精品v| 蜜臀99久久精品久久久久久软件 | 国内精品久久久久久影视8| 亚洲美女免费视频| 一区二区三区视频在线看| 日韩一级裸体免费视频| 夜夜夜久久久| 欧美国产精品中文字幕| 国产日本亚洲高清| 亚洲毛片视频| 麻豆亚洲精品| 亚洲激情电影中文字幕| 欧美大香线蕉线伊人久久国产精品| 一区二区欧美在线| 亚洲一区二区三区免费视频| 亚洲欧美成人| 久久久综合激的五月天| 国产精品视频免费观看www| 国内一区二区三区在线视频| 在线精品福利| 亚洲精品在线二区| 久久精品欧洲| 欧美激情国产日韩| 日韩一区二区免费看| 午夜欧美不卡精品aaaaa| 久久精品一区二区国产| 欧美成人综合在线| 国产精品日本精品| 这里只有精品在线播放| 亚洲日本aⅴ片在线观看香蕉| 亚洲一区www| 国产精品av免费在线观看| 国产欧美视频一区二区| 亚洲在线第一页| 亚洲调教视频在线观看| 国产精品久久久久久久久搜平片 | 一区二区精品国产| 亚洲精品久久久久中文字幕欢迎你| 欧美成人精品在线观看| 亚洲精品一区在线| 日韩亚洲在线观看| 国产精品xxxxx| 欧美一区激情| 久久免费的精品国产v∧| 欧美日韩亚洲一区| 国产欧美视频一区二区| 久久久久久9| 美国成人直播| 亚洲——在线| 久久精品道一区二区三区| 亚洲国产成人91精品| 亚洲激情网站| 国产精品一区2区| 亚洲视频免费看| 欧美激情aaaa| 欧美日韩精品在线| 午夜在线视频观看日韩17c| 亚洲电影第1页| 欧美一区二区视频观看视频| 永久91嫩草亚洲精品人人| 欧美一区二区精品久久911| 欧美一区二区三区视频在线| 亚洲国产高潮在线观看| 夜夜夜精品看看| 狠狠综合久久| 99精品视频网| 亚洲一二区在线| 久久精品午夜| 国产一区二区三区四区在线观看 | 亚洲精品社区| 免费视频久久| 亚洲一线二线三线久久久| 欧美一级视频一区二区| 亚洲欧洲精品一区二区三区| 可以看av的网站久久看| 欧美区一区二区三区| 久久网站免费| 久久久国产一区二区三区| 99视频在线精品国自产拍免费观看| 午夜一区不卡| 亚洲午夜精品一区二区| 蜜桃av一区二区在线观看| 久久精品国产亚洲aⅴ| 欧美日韩一区二区三区免费看| 久久久美女艺术照精彩视频福利播放| 午夜精品久久久久影视| 国产视频精品va久久久久久| 久久久国产91| 国产精品a久久久久| 亚洲国产精品成人精品| 国产精品永久| 宅男精品视频| 国产日韩欧美视频| 99精品99久久久久久宅男| 亚洲黄色一区二区三区| 久久精品72免费观看| 欧美在线视频播放| 蜜桃久久av一区| 久久亚洲综合色一区二区三区| 国产精品久久精品日日| 亚洲美女色禁图| 亚洲精品久久久久| 亚洲视频中文字幕| 一区二区精品在线| 欧美精品九九| 亚洲人成在线观看| 日韩视频三区| 欧美极品影院| 亚洲人成7777| 一区二区三区四区国产精品| 欧美日韩一区二区三区在线| 亚洲伦理中文字幕| 亚洲天堂网在线观看| 欧美日韩国产成人高清视频| 亚洲欧洲一区二区三区久久| 亚洲精品一二三| 欧美日韩精品伦理作品在线免费观看| 亚洲精品123区| 亚洲一区视频在线| 国产欧美激情| 久久久午夜电影| 亚洲黄色性网站| 先锋影音一区二区三区| 国模吧视频一区| 欧美成人中文字幕| 99国产精品久久久久久久久久| 亚洲免费在线观看| 黄色成人av| 老司机免费视频一区二区三区| 国产精品99久久久久久www| 欧美日韩的一区二区| 亚洲一区二区免费在线| 欧美一区二区免费| 亚洲第一精品在线| 欧美体内she精视频| 亚洲国产成人av| 亚洲视频精品| 伊人色综合久久天天五月婷| 欧美日本免费| 久久久久九九视频| 99re6热只有精品免费观看| 欧美在线视频观看| 亚洲激情网站| 国产日韩一区二区三区| 欧美激情网站在线观看| 性欧美办公室18xxxxhd| 亚洲欧洲久久| 久久亚洲精品一区| 亚洲一线二线三线久久久| 一区二区视频免费在线观看| 久久精品国产欧美亚洲人人爽| 欧美国产视频在线| 欧美在线一二三四区| 99www免费人成精品| 国内一区二区三区在线视频| 欧美三级电影精品| 欧美77777| 久久成人国产| 亚洲一区观看| 99精品视频免费观看| 欧美激情一二三区| 久久久99久久精品女同性| 亚洲桃花岛网站| 99v久久综合狠狠综合久久| 亚洲第一页在线| 一区在线观看视频| 国产一区二区三区四区hd| 国产精品人成在线观看免费|