检查程序代码中非托管资源是否有被释放处理的方法与流程

文档序号:17720062发布日期:2019-05-22 02:05阅读:365来源:国知局
检查程序代码中非托管资源是否有被释放处理的方法与流程

本发明涉及硅钛金膜管生产技术领域,具体为检查程序代码中非托管资源是否有被释放处理的方法。



背景技术:

在.net程序开发中,.net框架本身带有托管资源的垃圾回收机制,程序员不需要对内存进行释放处理。但是,对于本地非托管资源,例如文件句柄、数据库链接、com对象、以及其它一些系统级别的对象访问后,需要程序员进行手动清理,否则会造成资源被持续占用,操作系统最终资源不足导致无法运行甚至奔溃的情况。

现在一般是在编程规范上要求软件编程人员在资源使用完之后,手动调用资源释放代码对不再使用的资源进行释放。调用方式一般为调用对象的dispose()方法对资源进行显示释放,或是用using(){...}方法在资源的使用限制在局部范围内,用完后自动释放。

使用using(){...}方法一般没什么问题,在花括号结束的时候资源能够进行释放,程序编译器也能够识别花括号是否配对完整。问题在于使用dispose()方法的地方,经常有程序员在创建资源对象并使用完后,忘记了调用对象释放方法,造成了资源一直被占用。对于文件被占用,会出现另外的请求或进程就无法再打开修改文件;对于数据库资源未释放,会造成数据库连接池超过限制数量,数据库无法再访问的情况。而这些情况可能开始或在测试环境下并没有出现异常,但在正式生产环境下,随着用户对未释放资源请求的增加,在某个时刻才爆发出来,造成宕机的严重影响。

这就要求我们能够对程序员代码的规范性进行检查,找出没有进行资源释放的代码,在代码发布前就杜绝此类问题的发生。而通过人工审查代码的方式,无疑具有巨大的工作量,并且还可能出现漏检的情况。本发明设计了一种装置,能够自动检查出不合格的代码,在代码发布前进行警报,杜绝不合格代码被发布到生产环境。

现在都是通过人工审查代码的方式,检查资源有没有存在未被释放的情况,如果不能保证所有的代码都被审查,那么就有可能会出现漏检的情况,所有的代码都审查工作量也是非常巨大的。另外就是代码发布后再进行测试,或者代码发布后再通过一些检测工具进行跟踪监测。因为生产环境的复杂性,不能保证所有的测试功能点都被覆盖和监测到,另外就算检测出了问题,也可能无法准确定位到具体是哪里出了问题,成本和影响都是巨大的。



技术实现要素:

为了解决上述问题,本发明的目的在于提供检查程序代码中非托管资源是否有被释放处理的方法。

为实现上述目的,本发明提供如下技术方案:一种检查程序代码中非托管资源是否有被释放处理的方法,步骤如下:

a、确定程序中创建非托管资源对象的特征代码列表,一般用new关键字来创建对象,在.net程序中释放资源的方法统一为dispose(),关闭资源调用句柄的方法一般为close(),.net框架中常见的非托管资源对象有:sqlconnection,filestream,streamreader,streamwriter,binaryreader,binarywriter,memorystream,graphics,image,bitmap,registrykey等;

b、指定代码所在的文件夹,递归遍历查找文件夹下所有的程序代码文件;

c、读取程序代码文件,根据特征代码列表查找其中有创建非托管资源代码的地方;

d、检查外面是否使用了using()方法来创建对象,若没有使用using(),分析出所创建的托管对象的名称,再查找之后的代码里托管对象是否有调用了资源释放方法;

e、如果有未释放资源的代码,则添加到异常清单里,产生检查报告,并发出警报和返回异常代码数。

优选的,用到程序自动打包系统里,在编译打包前先调用代码自动检查模块对代码进行审查,如果出现异常警报停止下一步操作,防止代码被部署到生产环境。

优选的,可以使用正则表达式来查找所创建的非托管资源的对象名。

与现有技术相比,本发明的有益效果是:该检查程序代码中非托管资源是否有被释放处理的方法,采用工具自动扫描检查的方式,替代了人工审查代码,提高了工作效率,节约了开发成本。另外本发明是在代码发布前检查,杜绝了问题出现在生产环境中,避免了问题产生造成的负面影响。

附图说明

图1为本发明检查程序代码中非托管资源是否有被释放处理的方法流程示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明提供一种技术方案:一种检查程序代码中非托管资源是否有被释放处理的方法,步骤如下:

a、确定程序中创建非托管资源对象的特征代码列表,一般用new关键字来创建对象,在.net程序中释放资源的方法统一为dispose(),关闭资源调用句柄的方法一般为close(),.net框架中常见的非托管资源对象有:sqlconnection,filestream,streamreader,streamwriter,binaryreader,binarywriter,memorystream,graphics,image,bitmap,registrykey等;

b、指定代码所在的文件夹,递归遍历查找文件夹下所有的程序代码文件;

c、读取程序代码文件,根据特征代码列表查找其中有创建非托管资源代码的地方;

d、检查外面是否使用了using()方法来创建对象,若没有使用using(),分析出所创建的托管对象的名称,再查找之后的代码里托管对象是否有调用了资源释放方法;

e、如果有未释放资源的代码,则添加到异常清单里,产生检查报告,并发出警报和返回异常代码数。

进一步的,用到程序自动打包系统里,在编译打包前先调用代码自动检查模块对代码进行审查,如果出现异常警报停止下一步操作,防止代码被部署到生产环境。

进一步的,可以使用正则表达式来查找所创建的非托管资源的对象名。

尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。



技术特征:

技术总结
本发明涉及检查程序代码中非托管资源是否有被释放处理的方法,包步骤如下:a、确定程序中创建非托管资源对象的特征代码列表;b、指定代码所在的文件夹,递归遍历查找文件夹下所有的程序代码文件;c、读取程序代码文件,根据特征代码列表查找其中有创建非托管资源代码的地方;d、检查外面是否使用了using()方法来创建对象,若没有使用using(),分析出所创建的托管对象的名称,再查找之后的代码里托管对象是否有调用了资源释放方法;e、如果有未释放资源的代码,则添加到异常清单里,产生检查报告,并发出警报和返回异常代码数。该检查程序代码中非托管资源是否有被释放处理的方法采用自动扫描检查的方式,提高了工作效率,节约了开发成本。

技术研发人员:陈宁
受保护的技术使用者:珠海市网欣软件开发有限公司
技术研发日:2018.12.18
技术公布日:2019.05.21
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1