CN101582039A - 一种节省内存开销的插件加载方法 - Google Patents
一种节省内存开销的插件加载方法 Download PDFInfo
- Publication number
- CN101582039A CN101582039A CNA2009101079823A CN200910107982A CN101582039A CN 101582039 A CN101582039 A CN 101582039A CN A2009101079823 A CNA2009101079823 A CN A2009101079823A CN 200910107982 A CN200910107982 A CN 200910107982A CN 101582039 A CN101582039 A CN 101582039A
- Authority
- CN
- China
- Prior art keywords
- plug
- unit
- loading method
- memory cost
- manager
- 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.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种节省内存开销的插件加载方法,包括步骤:A1.建立并存储与插件对应的插件描述文件;A2.运行插件内核管理器,将所述插件描述文件存储的调用插件所需信息在所述插件内核管理器内进行注册;A3.调用插件时,根据所述插件在所述插件内核管理器内的注册信息加载相关插件。本发明节省内存开销的插件加载方法采用“虚加载”的方法来处理插件的加载,即通过插件内核管理器来管理插件的相关信息,只有在实际需要插件时才将插件加载到内存中,这样就减小了内存的开销,提高了计算机内存的使用效率。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种节省内存开销的插件加载方法。
背景技术
我们对插件系统并不陌生,它可以按照一些规则对内核进行扩展从而实现各种各样的功能,现有技术中有基于DLL的导出函数的插件模式,还有基于COM接口的插件模式。普通的系统,在编译发布之后,系统就不允许进行更改或扩充了,如果要进行某个功能的扩充,则必须要修改代码重新编译发布,而使用插件可以很好地避免这个问题。
随着计算机硬件性能的不断提升,一般计算机的内存容量已经达到G的水平了,这就容易忽略程序对内存的占用以及内存开销所造成的浪费问题。内存再大,终究是有限的,如果我们对内存中的程序的加载过程不考虑优化,那么最终会导致系统不堪重负,变得缓慢而错误频频。
比如我们熟悉的Photoshop软件,启动的时候要加载很多“滤镜”插件,但是在处理图像的过程中,可能根本就用不到这些功能,在内存中加载这些不被使用的“滤镜”插件显然造成了内存开销的浪费。
发明内容
本发明要解决的技术问题是提供一种节省内存开销的插件加载方法,克服现有技术的插件加载方法造成内存开销浪费的缺陷。
本发明为解决上述技术问题所采用的技术方案为:
一种节省内存开销的插件加载方法,包括步骤:
A1、建立并存储与插件对应的插件描述文件;
A2、运行插件内核管理器,将所述插件描述文件存储的调用插件所需信息在所述插件内核管理器内进行注册;
A3、调用插件时,根据所述插件在所述插件内核管理器内的注册信息加载相关插件。
所述的节省内存开销的插件加载方法,其中所述插件描述文件设为XML描述符文件。
所述的节省内存开销的插件加载方法,其中所述插件描述文件包括基本信息字段plugin、依赖插件信息字段required、功能定义信息字段define和功能实现信息字段implement。
所述的节省内存开销的插件加载方法,其中所述基本信息字段plugin存储的信息包括插件标识符ID。
所述的节省内存开销的插件加载方法,其中依赖插件信息字段required存储的信息包括与所述插件有依赖关系的插件标识符ID。
所述的节省内存开销的插件加载方法,其中所述插件内核管理器包括插件管理器、功能定义管理器和功能实现管理器。
所述的节省内存开销的插件加载方法,其中所述步骤A2包括步骤:将所述基本信息字段plugin的内容和所述依赖插件信息字段required的内容注册到所述插件管理器。
所述的节省内存开销的插件加载方法,其中所述步骤A2包括步骤:将所述功能定义信息字段define的内容注册到所述功能定义管理器。
所述的节省内存开销的插件加载方法,其中所述步骤A2包括步骤:将所述功能实现信息字段implement的内容注册到所述功能实现管理器。
所述的节省内存开销的插件加载方法,其中所述插件内核管理器还包括事件和消息管理器,由所述事件和消息管理器触发插件的加载。
本发明的有益效果:本发明节省内存开销的插件加载方法采用“虚加载”的方法来处理插件的加载,即通过插件内核管理器来管理插件的相关信息,只有在实际需要插件时才将插件加载到内存中,这样就减小了内存的开销,提高了计算机内存的使用效率。
附图说明
本发明包括如下附图:
图1为本发明插件内核管理器示意图;
图2为本发明插件信息注册过程流程图;
图3为本发明插件加载过程流程图;
图4为本发明插件功能实现函数调用流程图;
图5为本发明未发生功能调用时内存占用对比示意图;
图6为本发明发生功能调用时内存占用对比示意图。
具体实施方式
下面根据附图和实施例对本发明作进一步详细说明:
表1是与插件调用有关的信息,本发明采用XML描述符来描述插件的相关信息,先给出一个插件描述文件的实例:。
1<?xml version=″1.0″encoding=″UTF-8″?>
2<plugins>
3<plugin id=″MainPlugin″ name=″MainPlugin″ ver=″1.0″
desc=″MainPlugin″
4 provider=″Winduo Corp.″lib=″Mainplugin.dll″>
5 <define
6 funcID=″platform.ui.main.buttonlist″
7 name=″main.buttonlist″
8 procname=″UI_ButtonList″>
9 </define>
10 <define
11 funcID=″platform.ui.main.formlist″
12 name=″main.formlist″
13 procname=″UI_FormList″>
14 </define>
15 <implement
16 funcID=″platform.start″
17 id=″platform.start.MainPlugin″
18 name=″MainStart″
19 procname=″MainStart″>
20 </implement>
21 <required>
22 <id=”platform.base”>
23 <id=”platform.ui”>
24 </required>
25 </plugin>
26</plugins>
在上面的XML文本中,3、4行是对插件基本信息的描述,id属性描述了插件的唯一标识(插件标识符ID),name描述插件的名称,ver标识版本号,desc表示备注,provider表示作者,lib表示插件DLL的路径,这里只用dll相对于描述文本的路径。
依赖关系(依赖插件信息)用来描述该插件正常运行所必须的其他插件,在上面的XML文本中的第21-24行,显示了对插件依赖关系的描述方法:<required>节中将其他插件的标识符id(插件标识符ID)分别列出。
表1
分类 具体信息基本信息 插件名称插件标识插件所对应的动态库(DLL)名称版本作者版权备注依赖关系 本插件所依赖的插件功能实现(Implement) 本插件实现的功能功能定义(Define) 对某一功能的定义 |
功能实现是指本插件实现的功能定义。由于各个功能需要的参数不同,本发明采用XML子项来描述各种不同的参数。文本中的<implement>段显示了功能实现的描述方法:funcID表示实现功能的唯一标识,id表示功能实现自己的标识,name表示功能名称,procname表示功能对应的处理函数名称。当这个实现被触发时,插件内核管理器根据其插件id以及函数名字找到对应的处理函数入口。
功能定义是对某一功能的形式定义,但不需实现,功能可以由任何插件来实现,并且一个定义可以有多个实现。在文本的5-9行和10-14行分别定义了两个功能定义:funcID是功能的唯一标识,name表示功能名称,procname表示功能对应的处理函数名称。当插件系统检测到这个功能定义之后会记录下procname的名字以及插件标识符ID,当需要真正处理时,插件内核管理器根据插件id以及处理函数的名字找到对应的函数地址。
如图1所示,本发明插件内核管理器包括插件管理器、功能定义管理器、功能实现管理器、事件和消息管理器。其中插件管理器用于注册插件描述文件中基本信息字段内容和依赖插件信息(依赖关系)字段内容,功能定义管理器用于注册插件描述文件中功能定义信息字段内容,功能实现管理器用于注册插件描述文件中功能实现信息字段内容。
如图2所示,插件注册过程如下:
A查找插件描述文件plugin.xml
遍历插件目录(包含子目录),查找所有的插件描述文件。
B将插件描述文件的内容注册到插件管理器
a.查找plugin段,将基本信息添加到系统的插件管理器,
b.查找required段,将依赖插件id(插件标识符ID)添加到插件管理器,
c.查找define段,将功能定义的内容添加功能定义管理器,
d.查找implement段,将功能实现的内容添加到的功能实现管理器。
上述步骤完成之后,插件内核管理器就将已经发现的插件信息分解,并分别注册到了插件管理器、功能定义管理器和功能实现管理器中,但是插件本身并没有被加载到内存中。
如图3所示,当一个插件确实需要被加载时(事件和消息管理器捕捉到相应的事件或消息,触发插件加载),插件内核管理器先检查依赖插件是否加载完毕,如果没有加载那么先将依赖插件加载进内存,并且引用计数累加1。
处理函数未被调用之前,插件内核管理器中只存储了一个函数名称,当事件被触发时,插件内核管理器才检测函数所在的插件是否被加载,图4显示了处理函数调用过程。
本发明与普通加载方式的对比
我们以一个插件的生存周期来度量其内存占用情况。一个插件的生存周期是指从插件被插件管理器安装、加载、界面呈现、功能调用、释放的整个过程。
如图5和图6所示,假设插件的大小为500kb,运行时的最大内存占用为1000kb,文本描述占用1kb内存。
在未发生实际功能调用的情况下:
A、普通加载方式需要将插件加载进内存,所以占用内存为500kb。
B、本发明加载方式的优势就比较明显,因为没有发生功能调用,其内存占用只有1kb。
在发生功能调用的情况下:
A、普通加载方式在500kb的基础上,占用内存增加到峰值。
B、本发明加载方式,在功能调用被触发之后才加载插件,也就是说其内存占用是从1kb逐步增加到峰值。
本领域技术人员不脱离本发明的实质和精神,可以有多种变形方案实现本发明,以上所述仅为本发明较佳可行的实施例而已,并非因此局限本发明的权利范围,凡运用本发明说明书及附图内容所作的等效结构变化,均包含于本发明的权利范围之内。
Claims (10)
1、一种节省内存开销的插件加载方法,其特征在于,包括步骤:
A1、建立并存储与插件对应的插件描述文件;
A2、运行插件内核管理器,将所述插件描述文件存储的调用插件所需信息在所述插件内核管理器内进行注册;
A3、调用插件时,根据所述插件在所述插件内核管理器内的注册信息加载相关插件。
2、根据权利要求1所述的节省内存开销的插件加载方法,其特征在于:所述插件描述文件设为XML描述符文件。
3、根据权利要求2所述的节省内存开销的插件加载方法,其特征在于:所述插件描述文件包括基本信息字段plugin、依赖插件信息字段required、功能定义信息字段define和功能实现信息字段implement。
4、根据权利要求3所述的节省内存开销的插件加载方法,其特征在于:所述基本信息字段plugin存储的信息包括插件标识符ID。
5、根据权利要求4所述的节省内存开销的插件加载方法,其特征在于:依赖插件信息字段required存储的信息包括与所述插件有依赖关系的插件标识符ID。
6、根据权利要求5所述的节省内存开销的插件加载方法,其特征在于:所述插件内核管理器包括插件管理器、功能定义管理器和功能实现管理器。
7、根据权利要求6所述的节省内存开销的插件加载方法,其特征在于:所述步骤A2包括步骤:将所述基本信息字段plugin的内容和所述依赖插件信息字段required的内容注册到所述插件管理器。
8、根据权利要求7所述的节省内存开销的插件加载方法,其特征在于:所述步骤A2包括步骤:将所述功能定义信息字段define的内容注册到所述功能定义管理器。
9、根据权利要求8所述的节省内存开销的插件加载方法,其特征在于:所述步骤A2包括步骤:将所述功能实现信息字段implement的内容注册到所述功能实现管理器。
10、根据权利要求9所述的节省内存开销的插件加载方法,其特征在于:所述插件内核管理器还包括事件和消息管理器,由所述事件和消息管理器触发插件的加载。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2009101079823A CN101582039A (zh) | 2009-06-18 | 2009-06-18 | 一种节省内存开销的插件加载方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2009101079823A CN101582039A (zh) | 2009-06-18 | 2009-06-18 | 一种节省内存开销的插件加载方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101582039A true CN101582039A (zh) | 2009-11-18 |
Family
ID=41364194
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2009101079823A Pending CN101582039A (zh) | 2009-06-18 | 2009-06-18 | 一种节省内存开销的插件加载方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101582039A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102214109A (zh) * | 2010-04-08 | 2011-10-12 | 深圳市金蝶中间件有限公司 | 一种加载插件的方法及装置 |
CN103197950A (zh) * | 2013-04-19 | 2013-07-10 | 中国海洋大学 | 插件虚拟机实现方法 |
CN103218220A (zh) * | 2013-02-25 | 2013-07-24 | 上海谐宇网络科技有限公司 | 基于动态可插拔组件的物联网中间件系统 |
CN104021016A (zh) * | 2014-06-13 | 2014-09-03 | 北京奇虎科技有限公司 | 加载浏览器插件图标的方法及浏览器 |
CN104536733A (zh) * | 2014-12-10 | 2015-04-22 | 广东欧珀移动通信有限公司 | 描述插件安装包的方法及移动终端 |
CN104834541A (zh) * | 2015-03-30 | 2015-08-12 | 百度在线网络技术(北京)有限公司 | 功能模块挂载方法、挂载系统及更新挂载系统的方法 |
CN105872708A (zh) * | 2015-12-30 | 2016-08-17 | 乐视致新电子科技(天津)有限公司 | 一种显示桌面生成方法、显示桌面生成系统和智能电视 |
CN107239270A (zh) * | 2016-03-29 | 2017-10-10 | 阿里巴巴集团控股有限公司 | 代码处理方法和装置 |
CN114296829A (zh) * | 2021-12-30 | 2022-04-08 | 北京字节跳动网络技术有限公司 | 一种插件加载方法及装置 |
CN116991491A (zh) * | 2022-06-28 | 2023-11-03 | 重庆市通信建设有限公司 | 程序插件加载方法、装置、计算机设备及计算机程序 |
-
2009
- 2009-06-18 CN CNA2009101079823A patent/CN101582039A/zh active Pending
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102214109A (zh) * | 2010-04-08 | 2011-10-12 | 深圳市金蝶中间件有限公司 | 一种加载插件的方法及装置 |
CN103218220A (zh) * | 2013-02-25 | 2013-07-24 | 上海谐宇网络科技有限公司 | 基于动态可插拔组件的物联网中间件系统 |
CN103197950B (zh) * | 2013-04-19 | 2016-08-03 | 中国海洋大学 | 插件虚拟机实现方法 |
CN103197950A (zh) * | 2013-04-19 | 2013-07-10 | 中国海洋大学 | 插件虚拟机实现方法 |
CN104021016A (zh) * | 2014-06-13 | 2014-09-03 | 北京奇虎科技有限公司 | 加载浏览器插件图标的方法及浏览器 |
CN104021016B (zh) * | 2014-06-13 | 2017-04-12 | 北京奇虎科技有限公司 | 加载浏览器插件图标的方法及浏览器 |
CN104536733A (zh) * | 2014-12-10 | 2015-04-22 | 广东欧珀移动通信有限公司 | 描述插件安装包的方法及移动终端 |
CN104536733B (zh) * | 2014-12-10 | 2018-05-11 | 广东欧珀移动通信有限公司 | 描述插件安装包的方法及移动终端 |
CN108563429A (zh) * | 2014-12-10 | 2018-09-21 | Oppo广东移动通信有限公司 | 描述插件安装包的方法及移动终端 |
CN108563429B (zh) * | 2014-12-10 | 2021-06-29 | Oppo广东移动通信有限公司 | 描述插件安装包的方法及移动终端 |
CN104834541A (zh) * | 2015-03-30 | 2015-08-12 | 百度在线网络技术(北京)有限公司 | 功能模块挂载方法、挂载系统及更新挂载系统的方法 |
CN104834541B (zh) * | 2015-03-30 | 2018-11-09 | 百度在线网络技术(北京)有限公司 | 功能模块挂载方法、挂载系统及更新挂载系统的方法 |
CN105872708A (zh) * | 2015-12-30 | 2016-08-17 | 乐视致新电子科技(天津)有限公司 | 一种显示桌面生成方法、显示桌面生成系统和智能电视 |
CN107239270A (zh) * | 2016-03-29 | 2017-10-10 | 阿里巴巴集团控股有限公司 | 代码处理方法和装置 |
CN107239270B (zh) * | 2016-03-29 | 2020-10-27 | 创新先进技术有限公司 | 代码处理方法和装置 |
CN114296829A (zh) * | 2021-12-30 | 2022-04-08 | 北京字节跳动网络技术有限公司 | 一种插件加载方法及装置 |
CN114296829B (zh) * | 2021-12-30 | 2024-07-23 | 抖音视界有限公司 | 一种插件加载方法及装置 |
CN116991491A (zh) * | 2022-06-28 | 2023-11-03 | 重庆市通信建设有限公司 | 程序插件加载方法、装置、计算机设备及计算机程序 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101582039A (zh) | 一种节省内存开销的插件加载方法 | |
US20100083098A1 (en) | Streaming Information that Describes a Webpage | |
CN102841896A (zh) | 一种移动终端图文信息显示的方法、系统及移动终端 | |
CN102420903A (zh) | 一种基于手机的软件处理方法及手机 | |
CN104102502A (zh) | 一种实现热部署的处理方法、装置及服务器 | |
CN110888842A (zh) | 一种文件存储方法、文件查询方法、装置及设备 | |
CN101833464A (zh) | 一种移动终端分段加载应用程序的方法及装置 | |
CN103281798A (zh) | 一种实现修改同步的方法、装置及系统 | |
CN106203102A (zh) | 一种全网终端的病毒查杀方法及装置 | |
CN102467525A (zh) | 单据关联方法及系统 | |
CN105631019A (zh) | 元数据扩展方法和元数据扩展装置 | |
CN111813666B (zh) | 一种内存泄露定位的方法、装置、介质和电子设备 | |
CN111881094B (zh) | 日志中关键信息提取方法、装置、终端及存储介质 | |
CN102479355A (zh) | 一种实现业务单据加载的方法、装置及终端 | |
CN111931095A (zh) | 一种Android系统的图片加载方法 | |
CN103019798A (zh) | 一种识别安卓系统预装软件的方法和装置 | |
CN104679493A (zh) | 一种流程化的事件处理机制的改进方法 | |
CN106708547A (zh) | 一种服务插件管理方法和系统 | |
CN105426544B (zh) | 监控数据库状态的方法及装置 | |
CN106022110A (zh) | 识别推送平台应用的方法及装置 | |
CN101694617A (zh) | 一种基于资源标识符的多语言支持实现方法 | |
CN101183366A (zh) | 一种图片文件处理方法和系统 | |
CN105893031B (zh) | 一种缓存操作实现方法、业务层方法的调用方法及装置 | |
CN110955658B (zh) | 一种基于Java智能合约的数据组织和存储方法 | |
CN104714923A (zh) | 一种实现设备共享的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C57 | Notification of unclear or unknown address | ||
DD01 | Delivery of document by public notice |
Addressee: Zhang Daijun Document name: Notification of Passing Preliminary Examination of the Application for Invention |
|
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
DD01 | Delivery of document by public notice |
Addressee: Zhang Daijun Document name: Review of business letter |
|
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20091118 |