我正在为Unix和Windows操作系统开发python2应用程序,这可能会在用户请求时生成大量的输出文件(例如50k文件)。在测试期间,我注意到与Linux上的相同任务相比,输出生成任务在Windows上花费了相当长的时间。
所以我做了一些基准测试,通过生成和写入一些随机文本到50k文件,然后在Windows和Linux上删除这些文件(我有一台带有Windows 10和Archlinux双启动的机器,所以下面的代码在同一台机器)。
import os
from os.path import join
str_to_write = "a"*500
tdir = "temp"
def create_files():
os.makedirs(tdir)
for i in xrange(50000):
with open(join(tdir, "{}.txt".format(i)), "w") as fh:
fh.write(str_to_write)
def remove_files():
for i in os.listdir(tdir):
os.remove(join(tdir, i))
%time create_files()
Wall time: 896 ms
%time remove_files()
Wall time: 555 ms
%time create_files()
Wall time: 1min 18s
%time remove_files()
Wall time: 21.4 s
我注意到Windows防御程序的实时检查在Windows 10上默认打开,但即使关闭后也是如此:
# Windows defender real-time check off
%time create_files()
Wall time: 27.5 s
%time remove_files()
Wall time: 17.5 s
这完全可归因于文件系统(NTFS与Ext4)的差异吗?有什么办法可以减少在Windows上生成许多可以轻松分发的输出文件的时间吗?
编辑:忘记提及这些基准测试是在NVMe M.2 SSD上执行的。