调用系统命令会比ruby方法更快吗?

时间:2015-06-02 06:48:44

标签: ruby shell

我正在编写一个ruby脚本来比较大量的debian软件包'版。我有两种选择,使用debian系统'来自ruby脚本的dpkg --compare-versions或在Ruby中实现比较例程。

我的问题是哪个会更快?我应该依赖dpkg --compare-versions还是实施算法?

注意:我假设脚本只能从debian系统运行,但是从非debian系统运行的能力当然会带来额外的好处。

版本比较算法在Ubuntu policy

中描述

2 个答案:

答案 0 :(得分:3)

Ruby-Debian也可能是另一种选择。根据描述:

  

dpkg的ruby接口

     

这个包提供了Debian :: Dpkg和Debian :: DpkgDeb模块和   Debian :: Deb,Debian :: Dsc,Debian :: Archives,Debian :: Sources,   Debian :: Packages和Debian :: ruby​​的状态类

(不幸的是,网页上没有关于如何使用它的示例,所以我猜你最好的选择是安装它并在irb / pry会话中使用它。)

<强>更新

根据@Amadan的说明,这是一个完整的示例(我必须使用require 'debian'代替require 'ruby-debian'

安装

apt-get install libapt-pkg-dev
gem install ruby-debian

用法

require 'debian' 

puts Debian::Version.cmp_version("1.2.3", "<", "1.2.11")

答案 1 :(得分:2)

考虑到dpkg主要是用C语言编写的,并且尽可能快地进行了相当多的努力,我相信最好调用命令而不是尝试自己实现比较。即使您设法使算法与dpkg使用的算法一样高效,您仍然可以在C和Ruby之间保持速度差距,这是您无法克服的。

但是,创建多个进程会产生一些开销。由于您要比较数千个版本,您可能想要找出一个数据结构和/或算法,允许您一次进行多次比较(或减少所需的比较次数)。这种可行性取决于您的使用案例。

我首先尝试使用dpkg进行基准测试(因为这不需要太多工作),并且在考虑将工作用于尝试优化之前,看看它的运行时是否足够快以满足您的要求。