51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3660|回复: 2
打印 上一主题 下一主题

[资料] 搜狗音乐盒的启动(程序初始化)性能测试

[复制链接]
  • TA的每日心情
    擦汗
    4 天前
  • 签到天数: 1042 天

    连续签到: 4 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2016-3-2 16:28:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    一、测试条件:
    测试内容描述:
    记录从启动搜狗音乐盒,到主程序界面的初始化工作完成所消耗的时间。
      
    程序版本:
      
      
    搜狗音乐盒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):
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏1
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2020-8-4 11:02
  • 签到天数: 943 天

    连续签到: 1 天

    [LV.10]测试总司令

    2#
    发表于 2016-3-23 09:51:59 | 只看该作者
    学习,感谢分享。
    是一个现实实际应用例子。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-11-4 11:04
  • 签到天数: 274 天

    连续签到: 1 天

    [LV.8]测试军长

    3#
    发表于 2016-12-7 14:11:25 | 只看该作者
    看着好复杂
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-11 09:08 , Processed in 0.085036 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表