效率对比:各种语言构造100W个时间对象
原本是用perl写了一个通过给定的时间范围来筛选一个比较大的日志文件。但是测试发现筛选130W行日志需要2分多钟,对其中几个低效率函数单独进行了效率测试,发现构造100W个时间对象所花时间也是个大户。
于是,特地比较了几种语言构造100W个时间对象(或时间结构)的性能。以下是结论:
- Perl(Time::Piece模块):13秒
- Python(time模块):8.8秒(arrow包:50秒)
- Ruby(内置Time类):2.8秒
- Ruby(第三方类DateTime):0.9-1秒
- Golang(Time包):编译好的0.17秒,编译+执行0.26秒
- C(time.h):0.042秒
下面是各语言测试代码:
# Perl(Time::Piece)
$ time perl -MTime::Piece -e 'for(1..1000000){$t = Time::Piece->strptime("2017-03-23 16:30:15", "%Y-%m-%d %H:%M:%S")}'
real 0m13.045s
user 0m11.969s
sys 0m0.011s
# Ruby(Time)
$ time ruby -e '1000000.times {|x| t=Time.new(2017,3,23,16,30,15)}'
real 0m2.755s
user 0m1.781s
sys 0m0.767s
# Ruby(Datetime)
$ time ruby -r'date' -e '1000000.times {|x| t = DateTime.strptime("2017-03-23 16:30:15", "%Y-%m-%d %H:%M:%S")}'
real 0m0.994s
user 0m0.885s
sys 0m0.036s
# Python
import time
fmt = "%Y-%m-%d %H:%M:%S"
for i in range(0,1000000):
time.strptime("2017-10-23 12:30:23", fmt)
$ time python3 a.py
real 0m8.411s
user 0m7.805s
sys 0m0.094s
# Golang
package main
import (
"time"
)
func main() {
const format = "2006-01-02 15:04:05"
for i := 1; i < 1000000;i++ {
time.Parse(format, "2018-03-23 16:30:15")
}
}
$ time go run a.go # 编译加执行的go程序
real 0m0.267s
user 0m0.213s
sys 0m0.070s
$ time ./a # 编译过后的go程序
real 0m0.176s
user 0m0.162s
sys 0m0.001s
// C
#define _XOPEN_SOURCE
#include <time.h>
int main(void) {
struct tm tm;
int i;
for(i = 1;i<=1000000;++i){
strptime("2017-03-23 16:30:15", "%Y-%m-%d %H:%M:%S", &tm);
}
return 0;
}
$ time ./time.out
real 0m0.042s
user 0m0.039s
sys 0m0.001s
那么,对于写脚本的话,采用哪门语言呢?我想Ruby是很不错的选择,Golang也是不错的选择。
效率对比:各种语言构造100W个时间对象的更多相关文章
- c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习
c#中@标志的作用 参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...
- Bulk Insert & BCP执行效率对比
我们以BCP导出的CSV数据文件,分别使用Bulk insert与BCP导入数据库,对比两种方法执行效率 备注:导入目标表创建了分区聚集索引 1.BCP导出csv数据文件 数据量:15000000行, ...
- 如何用C#语言构造蜘蛛程序
"蜘蛛"(Spider)是Internet上一种很有用的程序,搜索引擎利用蜘蛛程序将Web页面收集到数据库,企业利用蜘蛛程序监视竞争对手的网站并跟踪变动,个人用户用蜘蛛程序下载We ...
- FileInputStream 与 BufferedInputStream 效率对比
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3550158.html ,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体 ...
- golang 浮点数 取精度的效率对比
需求 浮点数取2位精度输出 实现 代码 package main import ( "time" "log" "strconv" " ...
- Snapman系统中TCC执行效率和C#执行效率对比
Snapman集合了TCC编译器可以直接编译执行C语言脚本,其脚本执行效率和C#编译程序进行效率对比,包括下面4方面: 1.函数执行效率 2.数字转换成字符串 3.字符串的叠加 4.MD5算法 这是C ...
- read()/fread()/mmap()执行效率对比
一. read()/fread()/mmap()执行效率对比 系统调用read.c: #include <sys/types.h> #include <sys/stat.h> ...
- 并发编程8 线程的创建&验证线程之间数据共享&守护线程&线程进程效率对比&锁(死锁/递归锁)
1.线程理论以及线程的两种创建方法 2.线程之间是数据共享的与join方法 3.多线程和多进程的效率对比 4.数据共享的补充线程开启太快 5.线程锁 互斥锁 同步锁 6.死锁现象和递归锁 7.守护线程 ...
- 使用file_get_contents()和curl()抓取网络资源的效率对比
使用file_get_contents()和curl()抓取网络资源的效率对比 在将小程序用户头像合成海报的时候,用到了抓取用户头像对应的网络资源,那么抓取方式有很多,比如 file_get_cont ...
随机推荐
- Spring Cloud Zuul实现动态路由
1.添加依赖 2.启动类上添加注解 3.配置文件 zuul.ignored-services配置需要忽略的服务,多个用逗号分隔 注释zuul.ignored-services 前: 注释zuul.ig ...
- TOJ 2733 棋盘游戏
Description 小 希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“车”,并且使得他们不能互相攻击,这当然很简单,但是 Gardon限制了只有某些格子才 ...
- POJ 2570 Fiber Network
Description Several startup companies have decided to build a better Internet, called the "Fibe ...
- TOJ 2926 Series
Description An arithmetic series consists of a sequence of terms such that each term minus its immed ...
- 进入保护模式(一)——《x86汇编语言:从实模式到保护模式》读书笔记12
之前已经做了一些理论上的铺垫,这次我们就可以看代码了. 一.代码清单 ;代码清单11-1 ;文件名:c11_mbr.asm ;文件说明:硬盘主引导扇区代码 ;创建日期:2011-5-16 19:54 ...
- web部署启动或者运行报错查看日志寻找问题方法
今天运行一个项目,启动报错,查看日志,只看到了前半段错误日志,根据前半段错误日志差查找原因,找了两个小时,也没有解决掉,最后根据后半段错误日志十分钟定位错误,给解决了,以后出现问题不能急躁,查看完成的 ...
- IE678不兼容CSS3 user-select:none(不可复制功能),需要JS解决
[方法一:CSS3实现文本不可复制] .content {-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o- ...
- Win10内置应用恢复初始状态
和Win8/Win8.1相同,Win10也内置了很多默认Windows应用,比如计算器.天气.人脉.Groove音乐.电影和电视.邮件和日历.Edge浏览器等.一般情况下,这些应用不会有太大的问题,但 ...
- 跨域策略文件crossdomain.xml文件
使用crossdomain.xml让Flash可以跨域传输数据 一.crossdomain.xml文件的作用 跨域,顾名思义就是需要的资源不在自己的域服务器上,需要访问其他域服务器.跨域策略文件 ...
- Javaweb的get请求乱码解决
get方式请求:即将参数放在URL中,因此这就涉及到URL的编码了 方式一:[推荐] 方式二: 前端编码: encodeURI(encodeURI("")) 后端解码: java. ...