CN104572139B - 一种加速应用程序启动的方法和装置 - Google Patents

一种加速应用程序启动的方法和装置 Download PDF

Info

Publication number
CN104572139B
CN104572139B CN201310470270.4A CN201310470270A CN104572139B CN 104572139 B CN104572139 B CN 104572139B CN 201310470270 A CN201310470270 A CN 201310470270A CN 104572139 B CN104572139 B CN 104572139B
Authority
CN
China
Prior art keywords
application program
data code
file
operation information
portable
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201310470270.4A
Other languages
English (en)
Other versions
CN104572139A (zh
Inventor
刘光锴
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Tencent Cloud Computing Beijing Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201310470270.4A priority Critical patent/CN104572139B/zh
Publication of CN104572139A publication Critical patent/CN104572139A/zh
Application granted granted Critical
Publication of CN104572139B publication Critical patent/CN104572139B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明适用于互联网领域,提供了一种加速应用程序启动的方法,所述方法包括接收并解析所述应用程序的可移植的执行体文件和应用程序的符号文件,根据所述符号文件在所述应用程序中插入可用于记录应用程序的数据代码运行信息的标识;运行所述插入了标识信息的应用程序,获取所述标识记录的数据代码运行信息;根据所述记录的数据代码的运行信息,改变所述数据代码在可移植的执行体文件中的存储的位置信息。通过记录程序代码的运行信息,相应的改变数据代码的存储位置,从而能够使得应用程序运行时可以有效的减少硬盘I/O跳转的次数,提高读取硬盘数据的效率,从而达到提高应用程序的启动速度的目的。

Description

一种加速应用程序启动的方法和装置
技术领域
本发明属于互联网领域,尤其涉及一种加速应用程序启动的方法和装置。
背景技术
在应用程序启动时,根据启动的时机可以划分为冷启动(cold startup)和热启动(warm startup)两种,在托管应用程序环境中,冷启动是指NET Framework系统程序集和应用程序代码均不在内存中时,因而需要从磁盘提取它们;热启动则是指应用程序的后续启动,或者当大部分系统代码因之前由另一托管应用程序使用而已经存在于内存中时的应用程序启动。
由于应用程序的启动速度直接影响了用户对应用程序的首次体验印象,因此对于提高应用程序的启动速度显得尤为重要。在应用程序启动,尤其是应用程序冷启动时,应用程序需要从硬盘通过硬盘I/O读入相应的页面,由于读取的页面会存放在不同文件或者目录中,可能从第一个文 件的某部分读取一些页面,又从第一个文件的相距较远的另一部分中读入一些页面,接着从另一不同的文件中读入一些页面,然后从一个目录中读入页面后,再从第一个文件中读入一些页面,这样会导致增加磁盘寻道时间,影响磁盘I/O的效率,从而导致应用程序的启动速度过慢。
发明内容
本发明实施例的目的在于提供一种加速应用程序启动的方法,以解决现有技术中应用程序启动时,由于磁盘I/O效率低下而影响应用程序启动过慢的问题。
本发明实施例是这样实现的,一种加速应用程序启动的方法,所述方法包括:
接收并解析所述应用程序的可移植的执行体文件和应用程序的符号文件,根据所述符号文件在所述应用程序中插入可用于记录应用程序的数据代码运行信息的标识;
运行所述插入了标识信息的应用程序,获取所述标识记录的数据代码运行信息;
根据所述记录的数据代码的运行信息,改变所述数据代码在可移植的执行体文件中的存储的位置信息。
本发明实施例的另一目的在于提供一种加速应用程序启动的装置,所述装置包括:
解析插入单元,用于接收并解析所述应用程序的可移植的执行体文件和应用程序的符号文件,根据所述符号文件在所述应用程序中插入可用于记录应用程序的数据代码运行信息的标识;
运行获取单元,用于运行所述插入了标识信息的应用程序,获取所述标识记录的数据代码运行信息;
位置信息改变单元,用于根据所述记录的数据代码的运行信息,改变所述数据代码在可移植的执行体文件中的存储的位置信息。
在本发明实施例中,根据接收和解析的应用程序的符号文件,在解析的可移植的执行体文件中加入可用于记录应用程序的数据代码运行信息的标识,在应用程序运行时,得到数据代码运行信息,并且根据所述运行信息调整数据代码在可移植的执行体文件中的存储位置,使得应用程序运行时可以有效的减少硬盘I/O跳转的次数,提高读取硬盘数据的效率,从而达到提高应用程序的启动速度的目的。
附图说明
图1是本发明第一实施例提供的加速应用程序启动的方法的实现流程图;
图2是本发明第二实施例提供的加速应用程序启动的方法的实现流程图;
图3是本发明第三实施例提供的加速应用程序启动的方法的实现流程图;
图4为本发明第四实施例提供的加速应用程序启动的装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例可应用于Windows操作系统环境下的应用程序的启动速度的优化,基于同样的原理,也可以应用于其它操作系统。以Windows操作系统为例,本发明技术方案在应用程序的可移植的执行体文件编译出来后,完全不依赖于Visual C++compiler(VC++编译器)与Visual Studio linker(VS链接器)的帮助,通过对对可移植的执行体(英文简称为PE,英文全称为Portable Execute) 文件进行数据代码的重新布局存储位置,使得其在启动阶段速度加快,尤其是在冷启动阶段,对I/O时间占用比较大的程序效果特别显著。
实现本发明的应用程序的启动主要包括以下步骤:
接收并解析所述应用程序的可移植的执行体文件和应用程序的符号文件,根据所述符号文件在所述应用程序中插入可用于记录应用程序的数据代码运行信息的标识;运行所述插入了标识信息的应用程序,获取所述标识记录的数据代码运行信息;根据所述记录的数据代码的运行信息,改变所述数据代码在可移植的执行体文件中的存储的位置信息。根据接收和解析的应用程序的符号文件,在解析的可移植的执行体文件中加入可用于记录应用程序的数据代码运行信息的标识,在应用程序运行时,得到数据代码运行信息,并且根据所述运行信息调整数据代码的存储位置,使得应用程序运行时可以有效的减少磁盘I/O跳转的次数,提高读取数据的效率,从而达到提高应用程序的启动速度的目的。
经过项目验证,对于冷启动时间为4.1秒的应用程序,经本发明所述技术方案的方法优化后,启动时间达到1.9秒,程序冷启动时的硬页故障(hard page fault)由8000左右降到3000左右,极大的减少了I/O的读取,提高启动效率。
实施例一:
图1示出了本发明第一实施例提供的加速应用程序启动的方法的实现流程,详述如下:
在步骤S101中,接收并解析所述应用程序的可移植的执行体文件和应用程序的符号文件,根据所述符号文件在所述应用程序中插入可用于记录应用程序的数据代码运行信息的标识。
具体的,所述可移植的执行体是Portable Execute的中文全称,其英文简称为PE,常见的以EXE、DLL、OCX、SYS、COM后缀的文件都是PE文件, PE文件是微软Windows操作系统上的程序文件,其中可能是间接被执行,如 DLL文件。
所述符号文件(Symbol Files)是一个数据信息文件,它包含了应用程序二进制文件(比如以EXE、DLL等为后缀的文件)的调试信息,专门用于调试,最终生成的可执行文件在运行时并不需要符号文件,但程序中所有的变量信息都记录在这个文件中。用Visual C++和WinDbg调试程序时都要用到这个文件。
在Windows系统中,符号文件以.pdb为扩展名,比如:每个Windows操作系统下有一个GDI32.dll文件,编译器在编译该DLL文件的时候会产生一个 GDI32.pdb文件,一旦你拥有了这个PDB文件,那么便可以用它来调试并跟踪到GDI32.dll内部。
一般情况下,符号文件包括以下的数据信息:
全局变量(Global variables);
局部变量(Local variables);
函数名和它们的入口地址(Function names and the addresses of theirentry points);
FPO数据(Frame Pointer Omission):Frame Pointer是一种用来在调用堆栈(Call stack)中找到下一个将要被调用的函数的数据结构源代码的行序号(Source-linenumbers)
所述可用于记录应用程序的数据代码运行信息的标识,可以但不局限为每个访问函数插入hook(勾子)函数,通过使用Event Tracing for Windows记录下相关信息直到程序启动完毕,所述相关信息,比如可以为应用程序启动过程中对应用程序中的数据代码的访问的先后顺序、访问的时长等。
由于符号文件中记录了应用程序的函数的源代码的行号以及函数的入口地址,因此可以根据入口地址及行号信息,方便的插入hook函数。
在步骤S102中,运行所述插入了标识信息的应用程序,获取所述标识记录的数据代码运行信息。
在步骤S101中对应用程序插入了标识信息后,运行所述插入了标识信息的应用程序,通过能够记录标识信息的应用程序,如对于插入的hook函数,对每一个function,创建一个function_thunk函数,并用function_thunk取代原有的所有function的调用地址,通过Event Tracing for Windows记录应用程序的调用信息。当然,还可以通过其它与符号文件结合的方式,插入其它标识信息获取函数的调用信息。
所述数据代码的运行信息,可以包括所述数据代码的访问顺序。
在步骤S103中,根据所述记录的数据代码的运行信息,改变所述数据代码在可移植的执行体文件中的存储的位置信息。
其中,所述记录的数据代码的运行信息,可以通过解析符号文件中包括的排序信息块获取。
在得到数据代码的运行信息,比如运行调用的先后顺序等信息后,相应的改变数据代码在可移植的执行体文件中的存储位置,使其在使用较少次数的磁盘I/O,即可方便的调用其中的数据,从而提高磁盘I/O效率。
其中,在所述获取所述标识记录的数据代码运行信息包括所述数据代码的访问顺序时,可以根据所述数据代码的访问地址和数据代码的访问顺序,依次在硬盘中存储所述数据代码。
本发明实施例可以通过在应用程序的可移植的执行体文件中加入可用于记录应用程序的数据代码运行信息的标识,在应用程序运行时,得到数据代码运行信息,并且根据所述运行信息调整数据代码的存储位置,使得应用程序运行时可以有效的减少读取硬盘数据时的I/O跳转的次数,提高读取硬盘数据的效率,从而达到提高应用程序的启动速度的目的。
实施例二:
图2示出了本发明第二实施例提供的加速应用程序启动的方法流程图,详述如下:
在步骤S201中,编译所述应用程序的可移植的执行体文件,生成所述可移植的执行体文件对应的符号文件。
在Windows系统中,对于C++应用程序,可以通过Visual C++compiler 编译器进行编译,得到PDB文件。PDB文件的结构是由下面几个部分组成的:
数据库头部(Database Header);
记录入口列表(List of Record Entries);
应用信息块(AppInfo Block)(可选);
排序信息块(SortInfo Block)(可选);
数据库记录信息(Sequence of raw record data);
其中在数据库头部结构中,确定了应用信息块(AppInfo Block)和排序信息块(SortInfo Block)的位置信息。记录入口列表中确定了所有记录的位置相关的信息。
在步骤S202中,接收并解析所述应用程序的可移植的执行体文件和应用程序的符号文件,根据所述符号文件在所述应用程序中插入可用于记录应用程序的数据代码运行信息的标识。
在步骤S203中,运行所述插入了标识信息的应用程序,获取所述标识记录的数据代码运行信息。
在步骤S204中,根据所述记录的数据代码的运行信息,改变所述数据代码在可移植的执行体文件中的存储的位置信息。
另外,还可以包括步骤S205,编译所述改变了数据代码的存储的位置信息的应用程序,生成新的应用程序对应的符号文件。
通过步骤S205生成新的符号文件,可以转至步骤S202中,进一步对应用程序的启动效率进行优化。
本发明实施例与实施例一不同之处在于,根据符号文件中包括的排序信息对数据代码进行排序后,进一步生成新的符号文件,可便于再次对应用程序的数据文件进行重新布置存储位置,从而再次对其存储位置进行优化。
实施例三:
图3为本发明第三实施例提供的加速应用程序启动的方法的流程示意图,详述如下:
在步骤S301中,接收并解析所述应用程序的可移植的执行体文件和应用程序的符号文件,根据所述符号文件在所述应用程序中插入可用于记录应用程序的数据代码运行信息的标识;
在步骤S302中,运行所述插入了标识信息的应用程序,获取所述标识记录的数据代码运行信息;
在步骤S303中,根据所述记录的数据代码的运行信息,改变所述数据代码在可移植的执行体文件中的存储的位置信息。
在步骤S304中,在系统读取硬盘的应用程序的数据代码时,通过磁盘I/O 一次读取与需要的页面相邻的多个页面。
在实施例二 中通过将数据代码重新排序,使得磁盘I/O读取数据时能够减少跳转次数,提高访问效率,而本实施例通过一次读取多个相邻页面的数据代码,减少磁盘I/O的次数,可进一步提高数据访问效率。
实施例四:
图4为本发明第四实施例提供的加速应用程序启动的装置的结构示意图,详述如下:
本发明实施例所述加速应用程序启动的装置,包括:
解析插入单元401,用于接收并解析所述应用程序的可移植的执行体文件和应用程序的符号文件,根据所述符号文件在所述应用程序中插入可用于记录应用程序的数据代码运行信息的标识;
运行获取单元402,用于运行所述插入了标识信息的应用程序,获取所述标识记录的数据代码运行信息;
位置信息改变单元403,用于根据所述记录的数据代码的运行信息,改变所述数据代码在可移植的执行体文件中的存储的位置信息。
其中,本发明实施例还可包括第一编译单元404,用于编译所述应用程序的可移植的执行体文件,生成所述可移植的执行体文件对应的符号文件。
第二编译单元405,用于编译所述改变了数据代码的存储的位置信息的应用程序,生成新的应用程序对应的符号文件。
读取单元406,用于在系统读取硬盘的应用程序的数据代码时,通过磁盘 I/O一次读取与需要的页面相邻的多个页面。
其中,所述获取所述标识记录的数据代码运行信息包括所述数据代码的访问顺序。所述根据所述记录的数据代码的运行信息,改变所述数据代码在可移植的执行体文件中的存储的位置信息步骤为根据所述数据代码的访问地址和数据代码的访问顺序,依次在硬盘中存储所述数据代码。
本发明所述装置实施例与实施例一至三所述方法实施例相对应,在此不作重复赘述。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (9)

1.一种加速应用程序启动的方法,其特征在于,所述方法包括:
接收并解析所述应用程序的可移植的执行体文件和应用程序的符号文件,根据所述符号文件在所述应用程序中插入可用于记录应用程序的数据代码运行信息的标识;
运行所述插入了标识的应用程序,获取所述标识记录的数据代码运行信息;
根据所述记录的数据代码运行信息,改变所述数据代码在可移植的执行体文件中的存储的位置信息;
其中,所述获取所述标识记录的数据代码运行信息包括所述数据代码的访问顺序。
2.根据权利要求1所述方法,其特征在于,在所述接收并解析所述应用程序的可移植的执行体文件和应用程序的符号文件,根据所述符号文件在所述应用程序中插入可用于记录应用程序的数据代码运行信息的标识步骤之前,所述方法还包括:
编译所述应用程序的可移植的执行体文件,生成所述可移植的执行体文件对应的符号文件。
3.根据权利要求1所述方法,其特征在于,在所述根据所述记录的数据代码运行信息,改变所述数据代码在可移植的执行体文件中的存储的位置信息步骤之后,所述方法还包括:
编译所述改变了数据代码的存储的位置信息的应用程序,生成新的应用程序对应的符号文件。
4.根据权利要求1所述方法,其特征在于,在所述根据所述记录的数据代码运行信息,改变所述数据代码在可移植的执行体文件中的存储的位置信息步骤之后,所述方法还包括:
在系统读取硬盘的应用程序的数据代码时,通过磁盘I/O一次读取与需要的页面相邻的多个页面。
5.根据权利要求1、2、3或4所述方法,其特征在于,所述根据所述记录的数据代码运行信息,改变所述数据代码在可移植的执行体文件中的存储的位置信息步骤为:
根据所述数据代码的访问地址和数据代码的访问顺序,依次在硬盘中存储所述数据代码。
6.一种加速应用程序启动的装置,其特征在于,所述装置包括:
解析插入单元,用于接收并解析所述应用程序的可移植的执行体文件和应用程序的符号文件,根据所述符号文件在所述应用程序中插入可用于记录应用程序的数据代码运行信息的标识;
运行获取单元,用于运行所述插入了标识的应用程序,获取所述标识记录的数据代码运行信息;
位置信息改变单元,用于根据所述记录的数据代码运行信息,改变所述数据代码在可移植的执行体文件中的存储的位置信息;
其中,所述获取所述标识记录的数据代码运行信息包括所述数据代码的访问顺序。
7.根据权利要求6所述装置,其特征在于,所述装置还包括:
第一编译单元,用于编译所述应用程序的可移植的执行体文件,生成所述可移植的执行体文件对应的符号文件。
8.根据权利要求6所述装置,其特征在于,所装置还包括:
第二编译单元,用于编译所述改变了数据代码的存储的位置信息的应用程序,生成新的应用程序对应的符号文件。
9.根据权利要求6所述装置,其特征在于,所装置还包括:
读取单元,用于在系统读取硬盘的应用程序的数据代码时,通过磁盘I/O一次读取与需要的页面相邻的多个页面。
CN201310470270.4A 2013-10-10 2013-10-10 一种加速应用程序启动的方法和装置 Active CN104572139B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310470270.4A CN104572139B (zh) 2013-10-10 2013-10-10 一种加速应用程序启动的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310470270.4A CN104572139B (zh) 2013-10-10 2013-10-10 一种加速应用程序启动的方法和装置

Publications (2)

Publication Number Publication Date
CN104572139A CN104572139A (zh) 2015-04-29
CN104572139B true CN104572139B (zh) 2019-01-08

Family

ID=53088304

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310470270.4A Active CN104572139B (zh) 2013-10-10 2013-10-10 一种加速应用程序启动的方法和装置

Country Status (1)

Country Link
CN (1) CN104572139B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111061516B (zh) * 2018-10-15 2021-09-14 华为技术有限公司 加速应用的冷启动的方法、装置和终端
CN109542531B (zh) * 2018-10-26 2021-11-23 创新先进技术有限公司 一种文件布局调整方法及装置
CN113326069A (zh) * 2020-02-28 2021-08-31 广东龙芯中科电子科技有限公司 操作系统启动方法、装置、电子设备及存储介质
CN114490442B (zh) * 2021-08-27 2023-01-13 荣耀终端有限公司 文件片段调整方法及电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1176426A (zh) * 1996-05-15 1998-03-18 摩托罗拉公司 在数据处理系统中对计算机指令执行排序的方法和装置
US5933630A (en) * 1997-06-13 1999-08-03 Acceleration Software International Corporation Program launch acceleration using ram cache
WO2007056364A1 (en) * 2005-11-10 2007-05-18 Ntt Docomo, Inc. Apparatus and associated methods for reducing application startup latency
CN101118477A (zh) * 2007-08-24 2008-02-06 成都索贝数码科技股份有限公司 一种提高磁盘数据访问效率的方法
CN102081583A (zh) * 2011-02-12 2011-06-01 中兴通讯股份有限公司 提高文件系统操作速率的方法及系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1176426A (zh) * 1996-05-15 1998-03-18 摩托罗拉公司 在数据处理系统中对计算机指令执行排序的方法和装置
US5933630A (en) * 1997-06-13 1999-08-03 Acceleration Software International Corporation Program launch acceleration using ram cache
WO2007056364A1 (en) * 2005-11-10 2007-05-18 Ntt Docomo, Inc. Apparatus and associated methods for reducing application startup latency
CN101118477A (zh) * 2007-08-24 2008-02-06 成都索贝数码科技股份有限公司 一种提高磁盘数据访问效率的方法
CN102081583A (zh) * 2011-02-12 2011-06-01 中兴通讯股份有限公司 提高文件系统操作速率的方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
动态二进制翻译后端代码热路径的重组优化;邓海鹏;《中国优秀硕士学位论文全文数据库信息科技辑》;20110715;全文

Also Published As

Publication number Publication date
CN104572139A (zh) 2015-04-29

Similar Documents

Publication Publication Date Title
CN104572139B (zh) 一种加速应用程序启动的方法和装置
CN110348216B (zh) 一种针对云计算系统虚拟设备的模糊测试方法及系统
US20150121085A1 (en) Cookie Information Sharing Method and System
CN109086215B (zh) 一种嵌入式软件单元测试用例生成方法及系统
CN105224309B (zh) 一种调取函数的方法和装置
CN103412754A (zh) 动态语言代码执行方法和装置
CN106020823A (zh) 一种前端Web表现与数据分离以及页面快速响应的方式
CN107632828A (zh) 多dts文件支持方法、编译装置及嵌入式设备
CN103218299B (zh) 优化的蚁群算法测试用例自动生成方法和系统
CN110609689A (zh) 一种应用的安装运行方法及装置
KR20160029754A (ko) 소프트웨어 고장의 위치 확정 방법, 장치 및 설비
CN103677931B (zh) 一种软件搬家的方法及装置
CN109298873A (zh) 一种系统升级方法及装置
CN106598828A (zh) 一种源代码中的无效类确定方法及装置
CN113191131A (zh) 用于文本识别的表格模板建立方法、文本识别方法、系统
CN109445856A (zh) 一种基于教育系统的加速应用启动的方法及电子设备
CN111222324A (zh) 时间识别方法、装置、计算机可读存储介质及电子设备
CN110020330A (zh) 页面跳转方法及页面跳转装置、设备和存储介质
CN110457348A (zh) 一种数据处理方法及装置
CN106126225B (zh) 一种基于程序演进模型的目标代码逆向工程方法
CN116701208A (zh) 一种芯片中内核模块的验证方法、系统、芯片和设备
CN107643892B (zh) 接口处理方法、装置、存储介质和处理器
Na et al. Comparative Analysis of Mobile App Reverse Engineering Methods on Dalvik and ART.
Friheim Practical use of dual tool verification in computer forensics
CN111858703B (zh) 一种benchmarkSQL性能测试数据统计方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20190806

Address after: 518000 Nanshan District science and technology zone, Guangdong, Zhejiang Province, science and technology in the Tencent Building on the 1st floor of the 35 layer

Co-patentee after: Tencent cloud computing (Beijing) limited liability company

Patentee after: Tencent Technology (Shenzhen) Co., Ltd.

Address before: Shenzhen Futian District City, Guangdong province 518044 Zhenxing Road, SEG Science Park 2 East Room 403

Patentee before: Tencent Technology (Shenzhen) Co., Ltd.

TR01 Transfer of patent right