51Testing软件测试论坛

标题: 搜狗音乐盒的启动(程序初始化)性能测试 [打印本页]

作者: lsekfe    时间: 2016-3-2 16:28
标题: 搜狗音乐盒的启动(程序初始化)性能测试
一、测试条件:
测试内容描述:
记录从启动搜狗音乐盒,到主程序界面的初始化工作完成所消耗的时间。
  
程序版本:
  
  
搜狗音乐盒v1.1.0.47(Release)
  
  
测试环境:
  
  
WinXP SP2 + Office2007
  
  
测试工具:
  
  
AQtime v5.40
  
  
起始时间点:
  
  
AfxWinMain的入口
  
  
终止时间点:
  
  
CSohuplayerDlg::OnInitDialog()执行完毕退出
  
硬件环境:
  
CPU
  
  
2 * Intel(R) Pentium(R) D CPU 3.00GHz, Frequency: ~2992 MHz
  
  
内存
  
  
2095144 Kb
  
进程列表:
  
进程名称
  
  
备注
  
  
Rtvscan.exe
  
  
  
  
AQtime.exe
  
  
AQtime v5.40
  
  
ONENOTE.EXE
  
  
OFFICE 20007 NOTE
  
  
Svhost.exe
  
  
  
  
OUTLOOK.EXE
  
  
OUTLOOK
  
  
TM.EXE
  
  
TM2008
  
  
system
  
  
  
  
Sqlservr.exe
  
  
  
  
Msnmsgr.exe
  
  
MSN
  
  
Csrss.exe
  
  
  
  
MSDEV.EXE
  
  
Visual C++ 6.0
  
  
VPTray.exe
  
  
  
  
ccApp.exe
  
  
  
  
Smss.exe
  
  
  
  
Explorer.exe
  
  
  
  
ONENOTEM.EXE
  
  
  
  
Winlogon.exe
  
  
  
  
Spoolsv.exe
  
  
  
  
SavRoam.exe
  
  
  
  
Smax4pnp.exe
  
  
  
  
Svhost.exe
  
  
  
  
TSVNCache.exe
  
  
SVN v1.5
  
  
Lsass.exe
  
  
  
  
Svchost.exe
  
  
  
  
Nutsrv4.exe
  
  
  
  
Svchost.exe
  
  
  
  
Services.exe
  
  
  
  
ccSetMgr.exe
  
  
  
  
TXPlatform.exe
  
  
  
  
DefWatch.exe
  
  
  
  
Sqlbrowser.exe
  
  
  
  
Usnsvc.exe
  
  
  
  
Svchost.exe
  
  
  
  
Alg.exe
  
  
  
  
Ctfmon.exe
  
  
  
  
ccEvtMgr.exe
  
  
  
  
Conime.exe
  
  
  
二、测试步骤:
1.配置VC6的编译信息:
1).Set  Active Project Configuration:
                              
2).Project Settings | C/C++选项中,设置DebuginfoProgram Database.
3).Project Settings | Link,选择CategoryGeneral,将Generate debug info复选框选中.
4).Project Settings | Link,选择CategoryCustomize,在Program database name中填入PDB文件路径:
5).Project Settings | Link,选择CategoryDebug,勾选Debuginfo;去除Separate types
至此准备工作已经完成,编译源代码。
2.配置AQTIME
1).AQtime中添加待测试程序和模块:
2).配置AreaActions
3.运行并得到测试结果:
AQtime Performance Profiler
Session information
  
Started:
  
  
2008-7-8 20:50:20
  
  
Ended:
  
  
2008-7-8 20:50:24
  
  
Execution time:
  
  
00:00:03:891
  
  
Routines analyzed:
  
  
6197
  
  
Routines executed:
  
  
694
  
  
Total number of routine calls:
  
  
8000
  
  
Total value of 'Elapsed Time':
  
  
1608.46
  
Performance hot spots
All Threads
Worst performance (body only):
      
207.50
  
      
201.74
  
      
176.80
  
      
126.72
  
      
126.50
  
      
87.57
  
      
78.68
  
      
69.66
  
      
63.38
  
      
55.74
  
Run settings
  
Profiling mode:
  
  
Normal
  
  
Host Application:
  
  
  
  
Parameters:
  
  
  
  
Work Directory:
  
  
  
Profiler options
  
Active counter:
  
  
Elapsed Time
  
  
Thread model:
  
  
Win32 Threads
  
  
Profile <Root> routine:
  
  
False
  
  
Profile Entire .NET Code:
  
  
None
  
  
Disable inlining:
  
  
False
  
  
Profile .NET runtime:
  
  
False
  
System information
  
Operating system:
  
  
Microsoft Windows XP Service Pack 2 (version: 5.1 Build 2600)
  
  
Total physical memory:
  
  
2095144 Kb
  
  
Available physical memory:
  
  
1322132 Kb
  
  
Total virtual memory:
  
  
2097024 Kb
  
  
Available virtual memory:
  
  
1800944 Kb
  
  
Processor type:
  
  
Intel(R) Pentium(R) D CPU 3.00GHz, Frequency: ~2992 MHz.
  
  
Number of processors:
  
  
2
  
调用函数执行时间截图:(部分)
函数调用关系截图:(部分)
三、测试结果报告:
1.程序执行时间超过100毫秒的函数分别是:
  
函数名
  
  
执行时间
  
  
包含子函数的执行时间
  
  
备注
  
  
Cthread<CAdWorkThread>::tfunc
  
  
207.50毫秒
  
  
208.60毫秒
  
  
主线程工作函数,忽略
  
  
CSohuplayerApp:InitInstance
  
  
201.74毫秒
  
  
1191.30毫秒
  
  
  
  
CDBOperater::InitLocalDataBase2
  
  
176.80毫秒
  
  
306.70毫秒
  
  
  
  
CDownloadThreadBase::WinGetFileFromSvr
  
  
126.72毫秒
  
  
126.78毫秒
  
  
发送HTTP请求等待时间
  
  
CDBOperater::GetCreateFields
  
  
126.50毫秒
  
  
126.54毫秒
  
  
  
2.因为主程序的初始化工作都是在CSohuplayerApp::InitInstance中完成的,所以由此函数作为分析入口,逐步展开分析:
由上图结果可以看到,InstallCrashReport()在正式发布版本中是不编译执行的,可忽略;AfxOleInit时间消耗并不大,可忽略;重点分析intnRespoinse = dlg.DoModal(),即音乐盒主窗口的实例化操作CSohuplayerDlg::OnInitDialog函数。
3)AQTIMEEditor面板中,进一步分析主窗口初始化函数CSohuplayerDlg::OnInitDialog的各条语句运行时间,得到如下图:
找到2个时间消耗较大的函数:CreateChildWnd()CDBOperater::Instance()->InitLocalDataBase(&m_db)
1).首先分析CDBOperater::InitLocalDataBase,因为其函数内部只是进一步地调用CDBOperater:InitLocalDataBase2,所以查看CDBOperater:InitLocalDataBase2的各条语句执行时间信息:
BOOLCDBOperater::InitLocalDataBase2(CDatabase* pdb)
// HitCount          : 1
//Time               : 176.80
//Time with Children : 306.70
{

CCriticalSectionGuardguard(&m_csDBGuard);

m_pdb = pdb;
DWORD dwAttr =::GetFileAttributes(m_strDBFile);
if ( 0xFFFFFFFF ==dwAttr )
{
if ( FALSE ==CreateMultiDirectory(m_strDBFile) )
{
return FALSE;
}
……
else
{
::CoInitialize(NULL);
CString strCNN =_T("rovider=Microsoft.JET.OLEDB.4.0;Data source = ");
strCNN +=m_strDBFile;
_CatalogPtrpCatalog = NULL;
pCatalog.CreateInstance(__uuidof(Catalog));
if ( NULL ==pCatalog )
{
::CoUninitialize();
return FALSE;
}
pCatalog->utActiveConnection((LPCTSTR)strCNN);//耗时115.59毫秒
if (pCatalog->Tables->Count > 0 )
{
_variant_tvIndex((short)0);
_TablePtr pTable =pCatalog->Tables->GetItem(vIndex);
if ( NULL ==pTable )
{
::CoUninitialize();
return FALSE;
}
//"JetOLEDB:Compressed UNICODE Strings" can throw exception, ADO & MS Bug!!!
ChangeColumnProperty(pTable,"Song","JetOLEDB:Allow Zero Length",true);
ChangeColumnProperty(pTable,"Artist","JetOLEDB:Allow Zero Length",true);
ChangeColumnProperty(pTable,"Album","JetOLEDB:Allow Zero Length",true);
ChangeColumnProperty(pTable,"Type","JetOLEDB:Allow Zero Length",true);
}
::CoUninitialize();
m_pdb->OpenEx(m_strDsn,CDatabase::noOdbcDialog);//耗时37.66毫秒
CList<CString,CString>listCreateFields;
GetCreateFields(&listCreateFields);//耗时126.54毫秒
if (listCreateFields.GetCount() > 0 )
{
CreateNewFields(&listCreateFields);
}
….
分析:
可以看到时间消耗主要在上面粗体字显示的三个函数。pCatalog->utActiveConnection((LPCTSTR)strCNN)是调用的第三方XTPCalendarADO的方法,所以没有办法进一步追踪;m_pdb->OpenEx(m_strDsn,CDatabase::noOdbcDialog)是调用MFCCDataBase的方法,因此也没有办法进一步追踪。而GetCreateFields(&listCreateFields)可以进一步追踪:
GetCreateFields(&listCreateFields):
// HitCount          : 1
//Time               : 156.56
//Time with Children : 156.59
voidCDBOperater::GetCreateFields(CList<CString,CString>* plistCreateFields)
{
plistCreateFields->AddTail("Idx");
…...
CRecordsetrs(m_pdb);
CODBCFieldInfo fi;//144.32毫秒
rs.Open(CRecordset::forwardOnly,"SELECT* FROM AudioIndex WHERE Type = \'aaa\'",CRecordset::readOnly);
int nFCount =rs.GetODBCFieldCount();
while(nFCount)
{
…….
nFCount--;
}
rs.Close();
}
分析:
时间主要消耗在CODBCFieldInfo类实例化的对象fi的过程中。
2).其次分析CreateChildWnd函数:
BOOLCSohuplayerDlg::CreateChildWnd()
// HitCount          : 1
//Time               : 11.87
//Time with Children : 382.62
…...
m_dlgPlayer.Create(NULL, NULL,WS_CHILD|WS_VISIBLE, CRect(0, 0, 0, 0), this, IDC_PLAYER_WND_ID);//耗时115.15毫秒
……
m_dlgAudioGroup.Create(IDD_MUSICCENTER_DIALOG,&m_ctrlTab);//耗时262.04毫秒
….
}
分析:
·        m_dlgPlayer是CSohuPlayer的成员变量,执行m_dlgPlayer.create即实例化m_dlgPlayer的过程。查看CDlgPlayer的子函数调用关系图,可以看到最终时间消耗在创建WMP控件的过程中。
·        消耗在m_dlgAudoGroup.Create的262.04毫秒中,有250.21毫秒是消耗在CMusicCenterDlg::OnInitDialog过程中,如下:
BOOLCMusicCenterDlg::OnInitDialog()
// HitCount          : 1
//Time               : 0.99
//Time with Children : 250.21
{
m_downloadListManage.SetMusicCenter(this);
m_auditionManage.SetMusicCenter(this);
m_playListManage.SetMusicCenter(this);
m_searchListManage.SetMusicCenter(this);
m_playmusicManage.SetMusicCenter(this);
CMusicCenterDlgBase::OnInitDialog();
::ShowWindow(GetDlgItem(IDC_CHECK_SONG)->GetSafeHwnd(),SW_HIDE);
DWORD dwSL = 1;
CPublicFun::GetSearchSL(dwSL);
((CButton*)GetDlgItem(IDC_CHECK_SONG))->SetCheck(dwSL);
…..
  
InitMusicCenter();
  
  
//56.12毫秒,占总时间消耗.22.43%
  
  
InitMusicPlayInfo();
  
  
//2.18毫秒,占总时间消耗0.87%
  
  
InitMusicLyric();
  
  
//47.20毫秒,占总时间消耗18.86%
  
  
InitMusicButtonEx();
  
  
//52.59毫秒,占总时间消耗21.02%
  
  
InitMusicSlider();
  
  
//18.26毫秒,占总时间消耗7.30%
  
  
InitMusicList();
  
  
//10.43毫秒,占总时间消耗4.17%
  
  
InitMusicExplorer();
  
  
//55.78毫秒,占总时间消耗22.29%
  
…..
四、结果:
CDBOperater:InitLocalDataBase2函数内的pCatalog->utActiveConnection((LPCTSTR)strCNN),影响启动时间较大,有优化的可能。
搜狗音乐盒网络歌曲列表加载性能测试
2008年7月9日
10:25
一、测试条件:
测试内容描述:
当程序运行时,记录用户点击程序窗口左侧的"音乐排行榜"->"热门单曲",到歌曲列表被插入到列表控件的时间(不包含界面刷新的时间)
  
程序版本:
  
  
搜狗音乐盒v1.1.0.47(Release)
  
  
测试环境:
  
  
WinXP SP2 + Office2007
  
  
测试工具:
  
  
AQtime v5.40
  
  
起始时间点:
  
  
CPersistentTreeCtrl::OnSelchangeingTree入口
  
  
终止时间点:
  
  
CMusicCenterDlg:oadSearchUrlFromBuffer出口
  
硬件环境:
  
CPU
  
  
2 * Intel(R) Pentium(R) D CPU 3.00GHz, Frequency: ~2992 MHz
  
  
内存
  
  
2095144 Kb
  
进程列表:
  
进程名称
  
  
备注
  
  
Rtvscan.exe
  
  
  
  
AQtime.exe
  
  
AQtime v5.40
  
  
ONENOTE.EXE
  
  
OFFICE 20007 NOTE
  
  
Svhost.exe
  
  
  
  
OUTLOOK.EXE
  
  
OUTLOOK
  
  
TM.EXE
  
  
TM2008
  
  
system
  
  
  
  
Sqlservr.exe
  
  
  
  
Msnmsgr.exe
  
  
MSN
  
  
Csrss.exe
  
  
  
  
MSDEV.EXE
  
  
Visual C++ 6.0
  
  
VPTray.exe
  
  
  
  
ccApp.exe
  
  
  
  
Smss.exe
  
  
  
  
Explorer.exe
  
  
  
  
ONENOTEM.EXE
  
  
  
  
Winlogon.exe
  
  
  
  
Spoolsv.exe
  
  
  
  
SavRoam.exe
  
  
  
  
Smax4pnp.exe
  
  
  
  
Svhost.exe
  
  
  
  
TSVNCache.exe
  
  
SVN v1.5
  
  
Lsass.exe
  
  
  
  
Svchost.exe
  
  
  
  
Nutsrv4.exe
  
  
  
  
Svchost.exe
  
  
  
  
Services.exe
  
  
  
  
ccSetMgr.exe
  
  
  
  
TXPlatform.exe
  
  
  
  
DefWatch.exe
  
  
  
  
Sqlbrowser.exe
  
  
  
  
Usnsvc.exe
  
  
  
  
Svchost.exe
  
  
  
  
Alg.exe
  
  
  
  
Ctfmon.exe
  
  
  
  
ccEvtMgr.exe
  
  
  
  
Conime.exe
  
  
  
二、测试步骤:
1.配置VC6的编译信息:
2.配置AQTIME
3.运行并得到测试结果:
AQtime Performance Profiler
Session information
  
Started:
  
  
2008-7-9 16:09:19
  
  
Ended:
  
  
2008-7-9 16:09:27
  
  
Execution time:
  
  
00:00:08:031
  
  
Routines analyzed:
  
  
6197
  
  
Routines executed:
  
  
92
  
  
Total number of routine calls:
  
  
4364
  
  
Total value of 'Elapsed Time':
  
  
40.79
  
Performance hot spots
All Threads
Worst performance (body only):
      
7.70
  
      
5.13
  
      
4.14
  
      
3.61
  
      
3.47
  
      
3.26
  
      
2.73
  
      
2.31
  
      
1.34
  
      
1.19
  
Worst performance (with children):
Routine with max HitCount:
Win32 Thread 4920
Run settings
  
Profiling mode:
  
  
Normal
  
  
Host Application:
  
  
  
  
Parameters:
  
  
  
  
Work Directory:
  
  
  
Profiler options
  
Active counter:
  
  
Elapsed Time
  
  
Thread model:
  
  
Win32 Threads
  
  
Profile <Root> routine:
  
  
False
  
  
Profile Entire .NET Code:
  
  
None
  
  
Disable inlining:
  
  
False
  
  
Profile .NET runtime:
  
  
False
  
System information
  
Operating system:
  
  
Microsoft Windows XP Service Pack 2 (version: 5.1 Build 2600)
  
  
Total physical memory:
  
  
2095144 Kb
  
  
Available physical memory:
  
  
1281352 Kb
  
  
Total virtual memory:
  
  
2097024 Kb
  
  
Available virtual memory:
  
  
1827216 Kb
  
  
Processor type:
  
  
Intel(R) Pentium(R) D CPU 3.00GHz, Frequency: ~2992 MHz.
  
  
Number of processors:
  
  
2
  
三、分析:
网络歌曲列表加载的时间主要集中在网络传输速度,而程序本身的执行时间所占比率非常短。提升此功能的突破点主要在提升网络传输的速度。
搜狗音乐盒界面刷新性能测试
2008年7月9日
10:25
一、测试条件:
测试内容描述:
当程序运行时,用户随意放大和缩小窗体,记录绘图函数所用的平均时间。
  
程序版本:
  
  
搜狗音乐盒v1.1.0.47(Release)
  
  
测试环境:
  
  
WinXP SP2 + Office2007
  
  
测试工具:
  
  
AQtime v5.40
  
硬件环境:
  
CPU
  
  
2 * Intel(R) Pentium(R) D CPU 3.00GHz, Frequency: ~2992 MHz
  
  
内存
  
  
2095144 Kb
  
进程列表:
  
进程名称
  
  
备注
  
  
Rtvscan.exe
  
  
  
  
AQtime.exe
  
  
AQtime v5.40
  
  
ONENOTE.EXE
  
  
OFFICE 20007 NOTE
  
  
Svhost.exe
  
  
  
  
OUTLOOK.EXE
  
  
OUTLOOK
  
  
TM.EXE
  
  
TM2008
  
  
system
  
  
  
  
Sqlservr.exe
  
  
  
  
Msnmsgr.exe
  
  
MSN
  
  
Csrss.exe
  
  
  
  
MSDEV.EXE
  
  
Visual C++ 6.0
  
  
VPTray.exe
  
  
  
  
ccApp.exe
  
  
  
  
Smss.exe
  
  
  
  
Explorer.exe
  
  
  
  
ONENOTEM.EXE
  
  
  
  
Winlogon.exe
  
  
  
  
Spoolsv.exe
  
  
  
  
SavRoam.exe
  
  
  
  
Smax4pnp.exe
  
  
  
  
Svhost.exe
  
  
  
  
TSVNCache.exe
  
  
SVN v1.5
  
  
Lsass.exe
  
  
  
  
Svchost.exe
  
  
  
  
Nutsrv4.exe
  
  
  
  
Svchost.exe
  
  
  
  
Services.exe
  
  
  
  
ccSetMgr.exe
  
  
  
  
TXPlatform.exe
  
  
  
  
DefWatch.exe
  
  
  
  
Sqlbrowser.exe
  
  
  
  
Usnsvc.exe
  
  
  
  
Svchost.exe
  
  
  
  
Alg.exe
  
  
  
  
Ctfmon.exe
  
  
  
  
ccEvtMgr.exe
  
  
  
  
Conime.exe
  
  
  
二、配置AQTIME的Profiler参数:
三、测试结果单位是微秒)
四、分析:
1.CPublicFun::CreateDirectoryExA:
由上面调用关系图可以看到在每次执行CPersistentListCtrl::CustomDrawSearhList时,都会执行CPublicFun::GetTempMusicPath,此函数的作用是获取下载音乐临时目录,如果不存在则创建。推测这里是一个性能瓶颈点。
Static CString strTmpMusic =CPublicFun::GetTempMusicPath()用法在整个工程中有26处调用,分别是
D:\Project\sohuplayer\LoginDlgVC6Dlg.cpp(1070):
D:\Project\sohuplayer\MCAuditionManage.cpp(68):        
D:\Project\sohuplayer\MCAuditionManage.cpp(232):
D:\Project\sohuplayer\MCDownloadListManage.cpp(209):
D:\Project\sohuplayer\MCDownloadListManage.cpp(633):
D:\Project\sohuplayer\MusicCenterDlg.cpp(924):
D:\Project\sohuplayer\MusicCenterDlg.cpp(7498):
D:\Project\sohuplayer\MusicCenterDlg.cpp(7874):
D:\Project\sohuplayer\MusicCenterDlg.cpp(8911):
D:\Project\sohuplayer\MusicCenterDlg.cpp(8983):
D:\Project\sohuplayer\MusicCenterDlg.cpp(9018):
D:\Project\sohuplayer\MusicCenterDlg.cpp(9928):
D:\Project\sohuplayer\MusicCenterDlg.cpp(11404):        
D:\Project\sohuplayer\MusicCenterDlg.cpp(12448):        
D:\Project\sohuplayer\MusicCenterDlg.cpp(13156):        
D:\Project\sohuplayer\PersistentListCtrl.cpp(761):
D:\Project\sohuplayer\PersistentListCtrl.cpp(1061):
D:\Project\sohuplayer\PersistentListCtrl.cpp(1090):
D:\Project\sohuplayer\PersistentListCtrl.cpp(2542):
D:\Project\sohuplayer\PersistentListCtrl.cpp(2745):
D:\Project\sohuplayer\PersistentListCtrl.cpp(2906):
D:\Project\sohuplayer\PersistentListCtrl.cpp(4290):
D:\Project\sohuplayer\PersistentListCtrl.cpp(5385):
D:\Project\sohuplayer\PersistentListCtrl.cpp(6129):
D:\Project\sohuplayer\Public.cpp(237):
D:\Project\sohuplayer\WndContainer.cpp(993):

作者: fhhh_eyou    时间: 2016-3-23 09:51
学习,感谢分享。
是一个现实实际应用例子。
作者: SunnyLan    时间: 2016-12-7 14:11
看着好复杂




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2