转贴请注明出处!
今天是工作的第2天,项管第一天就让我接触PROFILE 测试一个程序,来得知各个函数的执行次数和时间.我曾经在看书的时候对这种测试程序有一些了解, 知道它是为了了解程序的性能屏障,并针对他们进行优化.
昨天做了一天却没有一点收获,到了家自己写了个简单的测试程序.并对工程进行设置.网上没有太多的PROFILE使用的文章,太多太多的转载让我失望而且无奈.于是自己终于通过努力在昨天晚上对自己简单的测试程序进行了测试.
但今天到了工作中.却发现面对庞大的项目我无能为力了,即使对项目也进行了PROFILE但测试的结果却少的可怜,甚至可以说只有简单的对MAIN 函数和抽象出来的封装函数有一些数据.对底层的函数连函数名都没有显示.并且大部分时间PROFILE菜单项都是灰色不能选的.后来在一个高手的帮助下.和自己的努力下.终于对这个项目成功的测试.因为项管主要让我测试一个.DLL 所以现在把我对此.DLL的测试进行一下说明.
当然你可以在CMD中直接自己命令行,但路径一定要正确.你也可以编写一个.BAT来批处理
COPY PDFBaseLib26.dll save
PREP /OM /FT PDFBaseLib26.DLL
COPY PDFBaselib26._ll PDFBaseLib26.dll
PROFILE /I PDFBaseLib26 /O PDFBaseLib26 AHPDFToolCmd26.exe -mergeFile -d hello.pdf -d test.pdf -o out.pdf
COPY save PDFBaseLib26.dll
PREP /M PDFBaseLib26
PLIST PDFBaseLib26 > Profile/PDFBaseLib26.txt
当然路径就不多说了 PREP PLIST PROFILE 3个.EXE文件都要在这个.BAT路径.并且需要从VC98 BIN中找到mspdb60.dll下载到这个本路径下.
文件中的AHPDFToolCmd26.exe -mergeFile -d hello.pdf -d test.pdf -o out.pdf
是针对此软件的命令行和参数.当然如果没有参数一样可以的.
这样PROFILE/下就会有一个文本文件.打开它,如果没有错误数据就出来了.
因为项目很大,我只截取一点来让大家熟悉一下.
Profile: Function timing, sorted by time
Date: Thu Aug 02 17:11:05 2007
Program Statistics
------------------
Command line at 2007 Aug 02 17:10: AHPDFToolCmd26.exe -mergeFile -d hello.pdf -d test.pdf -o out.pdf
Total time: 1707.458 millisecond
Time outside of functions: 398.236 millisecond
Call depth: 62
Total functions: 6523
Total hits: 4181089
Function coverage: 30.5%
Overhead Calculated 11
Overhead Average 11
Module Statistics for pdfbaselib26.dll
--------------------------------------
Time in module: 1309.222 millisecond
Percent of time in module: 100.0%
Functions in module: 6523
Hits in module: 4181089
Module function coverage: 30.5%
Func Func+Child Hit
Time % Time % Count Function
---------------------------------------------------------
132.862 10.1 132.862 10.1 34097 std::basic_istream<char,struct std::char_traits<char> >::get(char &) (msvcp60.dll)
132.255 10.1 193.833 14.8 596096 std::_Construct(char *,char const &) (pdfreader.obj)
116.436 8.9 175.783 13.4 596096 std::allocator<char>::destroy(char *) (pdfreader.obj)
95.262 7.3 289.095 22.1 596096 std::allocator<char>::construct(char *,char const &) (pdfreader.obj)
72.473 5.5 72.473 5.5 4128 std::basic_istream<char,struct std::char_traits<char> >::operator>>(long &) (msvcp60.dll)
66.290 5.1 66.290 5.1 4517 std::basic_istream<char,struct std::char_traits<char> >::tellg(void) (msvcp60.dll)
64.535 4.9 353.630 27.0 4657 std::vector<char,class std::allocator<char> >::_Ufill(char *,unsigned int,char const &) (pdfreader.obj)
61.812 4.7 61.812 4.7 599996 operator new(unsigned int,void *) (pdfencryptionsignature.obj)
59.347 4.5 59.347 4.5 596096 std::_Destroy(char *) (pdfreader.obj)
51.157 3.9 226.940 17.3 13971 std::vector<char,class std::allocator<char> >::_Destroy(char *,char *) (pdfreader.obj)
34.806 2.7 34.806 2.7 2957 std::basic_istream<char,struct std::char_traits<char> >::seekg(long,enum std::ios_base::seekdir) (msvcp60.dll)
19.984 1.5 19.984 1.5 4 std::basic_istream<char,struct std::char_traits<char> >::getline(char *,int) (msvcp60.dll)
18.993 1.5 45.238 3.5 4 PDF_Base::CLPD::Read(class std::basic_istream<char,struct std::char_traits<char> > &,int) (pdf_lpd.obj)
17.604 1.3 17.604 1.3 5491 std::operator<(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &) (msvcp60.dll)
17.487 1.3 17.487 1.3 65615 std::vector<char,class std::allocator<char> >::begin(void) (pdfreader.obj)
14.364 1.1 14.364 1.1 8891 operator new(unsigned int) (msvcrt.dll)
13.936 1.1 900.082 68.7 1808 PDF_Base::PDFReader::readCurrentObj(class PDF_Base::PDFObject * &) (pdfreader.obj)
13.589 1.0 48.439 3.7 56301 PDF_Base::charVector::operator[](int const &) (pdfreader.obj)
13.580 1.0 827.604 63.2 4657 PDF_Base::operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &) (pdfreader.obj)
12.792 1.0 243.082 18.6 4657 std::vector<char,class std::allocator<char> >::~vector<char,class std::allocator<char> >(void) (pdfreader.obj)
12.249 0.9 29.207 2.2 56301 std::vector<char,class std::allocator<char> >::operator[](unsigned int) (pdfreader.obj)
9.770 0.7 15.228 1.2 6445 PDF_Base::PDFName::~PDFName(void) (basefont.obj)
8.837 0.7 8.837 0.7 13692 _free (msvcrt.dll)
8.363 0.6 8.363 0.6 28 std::basic_istream<char,struct std::char_traits<char> >::read(char *,int) (msvcp60.dll)
8.284 0.6 67.275 5.1 1150 PDF_Base::operator>>(class PDF_Base::PDFReader &,class PDF_Base::PDFNumeric &) (pdfreader.obj)
7.844 0.6 8.545 0.7 5834 PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject>::PDFSmartPtr<class PDF_Base::PDFObject>(class PDFSmartPtr<class PDF_Base::PDFObject>::PDFSmartPtr<class PDF_Base::PDFObject> const &) (cjkfont.obj)
7.757 0.6 7.757 0.6 9103 std::basic_istream<char,struct std::char_traits<char> >::putback(char) (msvcp60.dll)
7.615 0.6 7.615 0.6 4657 std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::append(char const *,unsigned int) (msvcp60.dll)
7.039 0.5 7.039 0.5 126573 std::vector<char,class std::allocator<char> >::size(void) (pdfreader.obj)
6.836 0.5 15.672 1.2 13691 operator delete(void *) (delop_s.obj)
6.796 0.5 745.877 57.0 96 PDF_Base::operator>>(class PDF_Base::PDFReader &,class PDF_Base::PDFArray<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > &) (pdfreader.obj)
6.200 0.5 249.282 19.0 4657 PDF_Base::charVector::~charVector(void) (pdfreader.obj)
5.353 0.4 5.353 0.4 9655 PDF_Base::PDFRCObject::~PDFRCObject(void) (basefont.obj)
4.586 0.4 4.586 0.4 212 std::basic_istream<char,struct std::char_traits<char> >::operator>>(float &) (msvcp60.dll)
4.524 0.3 4.524 0.3 1100 std::basic_ostream<char,struct std::char_traits<char> >::operator<<(long) (msvcp60.dll)
4.167 0.3 4.217 0.3 390 std::pair<struct PDF_Base::IndirectObj const ,class PDF_Base::ObjState>::pair<struct PDF_Base::IndirectObj const ,class PDF_Base::ObjState>(struct pair<struct PDF_Base::IndirectObj const ,class PDF_Base::ObjState>::pair<struct PDF_Base::IndirectObj const ,class PDF_Base::ObjState> const &) (pdfreader.obj)
3.657 0.3 4.751 0.4 3630 PDF_Base::PDFName::PDFName(char const *) (basefont.obj)
3.597 0.3 10.296 0.8 390 std::_Tree<struct PDF_Base::IndirectObj,struct std::pair<struct PDF_Base::IndirectObj const ,class PDF_Base::ObjState>,struct std::map<struct PDF_Base::IndirectObj,class PDF_Base::ObjState,struct std::less<struct PDF_Base::IndirectObj>,class std::allocator<class PDF_Base::ObjState> >::_Kfn,struct std::less<struct PDF_Base::IndirectObj>,class std::allocator<class PDF_Base::ObjState> >::_Destval(struct std::pair<struct PDF_Base::IndirectObj const ,class PDF_Base::ObjState> *) (pdfdocimpl.obj)
3.575 0.3 371.504 28.4 4657 std::vector<char,class std::allocator<char> >::insert(char *,unsigned int,char const &) (pdfreader.obj)
3.339 0.3 3.339 0.3 14246 std::_Lockit::_Lockit(void) (msvcp60.dll)
3.241 0.2 6.328 0.5 4657 std::vector<char,class std::allocator<char> >::erase(char *,char *) (pdfreader.obj)
3.109 0.2 10.985 0.8 9314 std::allocator<char>::deallocate(void *,unsigned int) (pdfreader.obj)
3.041 0.2 10.567 0.8 660 std::_Tree<class PDF_Base::PDFName,struct std::pair<class PDF_Base::PDFName const ,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> >,struct std::map<class PDF_Base::PDFName,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject>,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::_Kfn,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::_Insert(struct std::_Tree<class PDF_Base::PDFName,struct std::pair<class PDF_Base::PDFName const ,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> >,struct std::map<class PDF_Base::PDFName,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject>,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::_Kfn,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::_Node *,struct std::_Tree<class PDF_Base::PDFName,struct std::pair<class PDF_Base::PDFName const ,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> >,struct std::map<class PDF_Base::PDFName,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject>,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::_Kfn,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::_Node *,struct std::pair<class PDF_Base::PDFName const ,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > const &) (pdfobj.obj)
2.931 0.2 2.931 0.2 2496 std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::assign(char const *,unsigned int) (msvcp60.dll)
2.928 0.2 2.928 0.2 312 std::basic_istream<char,struct std::char_traits<char> >::operator>>(unsigned int &) (msvcp60.dll)
2.906 0.2 2.906 0.2 7179 std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::erase(unsigned int,unsigned int) (msvcp60.dll)
2.384 0.2 381.209 29.1 4657 std::vector<char,class std::allocator<char> >::assign(unsigned int,char const &) (pdfreader.obj)
2.319 0.2 2.319 0.2 210 std::basic_ostream<char,struct std::char_traits<char> >::operator<<(float) (msvcp60.dll)
2.132 0.2 15.157 1.2 945 PDF_Base::operator>>(class PDF_Base::PDFReader &,class PDF_Base::PDFName &) (pdfreader.obj)
1.959 0.1 8.221 0.6 6418 std::_Allocate(int,char *) (basefont.obj)
1.877 0.1 2.245 0.2 5418 std::_Tree<class PDF_Base::PDFName,struct std::pair<class PDF_Base::PDFName const ,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> >,struct std::map<class PDF_Base::PDFName,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject>,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::_Kfn,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::_Key(struct std::_Tree<class PDF_Base::PDFName,struct std::pair<class PDF_Base::PDFName const ,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> >,struct std::map<class PDF_Base::PDFName,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject>,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::_Kfn,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::_Node *) (pdfobj.obj)
1.834 0.1 1.834 0.1 9859 std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::at(unsigned int) (msvcp60.dll)
1.695 0.1 13.738 1.0 1114 PDF_Base::operator<<(class PDF_Base::PDFWriter &,class PDF_Base::PDFNumeric &) (pdfwriter.obj)
1.692 0.1 2.439 0.2 837 std::_Tree<class PDF_Base::PDFName,struct std::pair<class PDF_Base::PDFName const ,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> >,struct std::map<class PDF_Base::PDFName,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject>,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::_Kfn,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::_Freenode(struct std::_Tree<class PDF_Base::PDFName,struct std::pair<class PDF_Base::PDFName const ,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> >,struct std::map<class PDF_Base::PDFName,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject>,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::_Kfn,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::_Node *) (pdfobj.obj)
1.534 0.1 3.310 0.3 3989 std::fpos<int>::fpos<int>(long) (pdf_lpd.obj)
1.534 0.1 1.861 0.1 663 std::map<class PDF_Base::PDFName,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject>,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::empty(void) (pdfobj.obj)
1.494 0.1 2.309 0.2 4678 std::_Tree<class PDF_Base::PDFName,struct std::pair<class PDF_Base::PDFName const ,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> >,struct std::map<class PDF_Base::PDFName,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject>,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::_Kfn,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::iterator::operator->(void) (pageresources.obj)
1.414 0.1 1.414 0.1 6846 std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(class basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::allocator<char> const &) (msvcp60.dll)
1.404 0.1 2.913 0.2 9655 PDF_Base::PDFObject::PDFObject(enum PDFObject::ObjType) (basefont.obj)
1.347 0.1 7.958 0.6 1081 std::vector<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::insert(class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> *,unsigned int,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> const &) (cjkfont.obj)
1.336 0.1 1.336 0.1 9314 std::vector<char,class std::allocator<char> >::_Ucopy(char const *,char const *,char *) (pdfreader.obj)
1.328 0.1 1.328 0.1 1529 std::operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,char &) (msvcp60.dll)
1.282 0.1 1.282 0.1 14246 std::_Lockit::~_Lockit(void) (msvcp60.dll)
1.280 0.1 5.599 0.4 1325 std::_Tree<class PDF_Base::PDFName,struct std::pair<class PDF_Base::PDFName const ,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> >,struct std::map<class PDF_Base::PDFName,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject>,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::_Kfn,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::_Lbound(class PDF_Base::PDFName const &) (pdfobj.obj)
1.269 0.1 1.269 0.1 13971 std::vector<char,class std::allocator<char> >::end(void) (pdfreader.obj)
1.242 0.1 1.242 0.1 3090 std::operator==(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &) (msvcp60.dll)
1.239 0.1 1.239 0.1 1114 std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >(int) (msvcp60.dll)
1.203 0.1 1.203 0.1 2990 std::operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,char) (msvcp60.dll)
1.200 0.1 1.200 0.1 11676 std::_Tree<class PDF_Base::PDFName,struct std::pair<class PDF_Base::PDFName const ,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> >,struct std::map<class PDF_Base::PDFName,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject>,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::_Kfn,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::_Value(struct std::_Tree<class PDF_Base::PDFName,struct std::pair<class PDF_Base::PDFName const ,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> >,struct std::map<class PDF_Base::PDFName,class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject>,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObject> > >::_Kfn,struct std::less<class PDF_Base::PDFName>,class std::allocator<class PDF_Base::PDFSmartPtr<class PDF_Base::PDFObje
转贴请注明出处!