忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 1596 | 回复: 3

[文件目录] 新建多个空文本文件,ps大约快touch 10倍?!何解? [复制链接]

论坛徽章:
0
发表于 2017-07-31 13:10 |显示全部楼层
本帖最后由 本友会机友会摄友会 于 2017-07-31 13:16 编辑

这是一个真实的事情,挺多年了。是以前我在win中,用gnuwin32的时候遇到的。
尤其是在同时(依次)新建多个文本的时候。
set-content,比touch.exe,快多少并没有具体留数据。
后来我就用set-content,而不用touch.exe了。如果对性能要求极高甚至要用[System.IO.File]::WriteAllText()
这件事给我留下了touch.exe很慢的主观印象,但具体慢多少,没有客观数据,一忙这件事就忘了。


前两天,又遇到建立文件的事了。我就又用centos7。3 + powershell beta 4和touch对比了一下。
性能大概9----10倍。代码如下:欢迎帮忙测试。

  1. #powershell脚本,创建1000个空文本。1.txt 2.txt   ...    1000.txt
  2. #-------------------------------------
  3. # 脚本1$s = Get-Date
  4. for ($i = 1; $i -lt 1001; $i++)
  5. {
  6. cd /tmp
  7. touch "t_$i.txt"
  8. }
  9. $e = get-date
  10. New-TimeSpan -Start $s -End $e
复制代码


--------------

  1. #脚本2
  2. $s = Get-Date
  3. for ($i = 1; $i -lt 1001; $i++)
  4. {
  5. cd /tmp
  6. Set-Content -LiteralPath "t_$i.txt" -Value $null
  7. }
  8. $e = get-date
  9. New-TimeSpan -Start $s -End $e
  10. #-------------------------------------
复制代码


后来我分析了下,touch每次运行,重新创建进程,或许是导致慢的原因。
应该是越多次循环(依次建立文件越多),越慢吧,不知道各位测试结果如何?

因为我很久没更新了,或许我的touch.exe是老旧的?有人愿意帮忙在win中,用最新版本,也实验下吗?


论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
发表于 2017-08-02 22:02 |显示全部楼层
回复 1# 本友会机友会摄友会

外部程序路内建函数比性能?

楼主的想法还真新奇, 如果外部函数比内建函数快, 那还有必要内建这个函数么?

论坛徽章:
0
发表于 2017-08-03 11:31 |显示全部楼层
假设我把Set-Content,克隆成一个外部cmdlet命令,为Set-Content2,这个外部命令,性能会怎样?
答:
win7中,。net程序第一次运行慢。也就是说1慢+999快。
win10中,。net程序第一次运行也不慢了。因为这个命令,占用不了多大内存。被。net引擎缓存了。如果内存不足,将被。net垃圾回收,释放内存。

实际上touch命令是二进制程序,也运行了1000次,也早被linux内存缓存了吧。

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
发表于 2017-08-03 16:02 |显示全部楼层
回复 3# 本友会机友会摄友会

对于外部命令的调用, 每次都必须去读取源文件的.
虽然多次调用之后, 在读取文件这一步可能快些.
但是, 整个过程还是一样, 读取文件内容, 加载到内存, 初始化相应的函数, 然后执行. 每次如此.

印象中在早期的C++代码中, 外部函数(仅仅是定义在类外)就比定义在类内的要慢, 所以, 当然才有 inline 函数.
现在听说编译器会处理这些问题, 所以, 已经不必区别了.


您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP