• Alex Brainman's avatar
    os: make windows Stat as fast as Lstat for files and directories · 6144c727
    Alex Brainman authored
    Recent CL 41834 made windows Stat work for all symlinks.
    But CL 41834 also made Stat slow.
    
    John Starks sugested
    (see https://github.com/golang/go/issues/19922#issuecomment-300031421)
    to use GetFileAttributesEx for files and directories instead.
    This makes Stat as fast as at go1.9.
    
    I see these improvements on my Windows 7
    
    name       old time/op  new time/op  delta
    StatDot    26.5µs ± 1%  20.6µs ± 2%  -22.37%  (p=0.000 n=9+10)
    StatFile   22.8µs ± 2%   6.2µs ± 1%  -72.69%  (p=0.000 n=10+10)
    StatDir    21.0µs ± 2%   6.1µs ± 3%  -71.12%  (p=0.000 n=10+9)
    LstatDot   20.1µs ± 1%  20.7µs ± 6%   +3.37%  (p=0.000 n=9+10)
    LstatFile  6.23µs ± 1%  6.36µs ± 8%     ~     (p=0.587 n=9+10)
    LstatDir   6.10µs ± 0%  6.14µs ± 4%     ~     (p=0.590 n=9+10)
    
    and on my Windows XP
    
    name         old time/op  new time/op  delta
    StatDot-2    20.6µs ± 0%  10.8µs ± 0%  -47.44%  (p=0.000 n=10+10)
    StatFile-2   20.2µs ± 0%   7.9µs ± 0%  -60.91%  (p=0.000 n=8+10)
    StatDir-2    19.3µs ± 0%   7.6µs ± 0%  -60.51%  (p=0.000 n=10+9)
    LstatDot-2   10.8µs ± 0%  10.8µs ± 0%   -0.48%  (p=0.000 n=10+8)
    LstatFile-2  7.83µs ± 0%  7.83µs ± 0%     ~     (p=0.844 n=10+8)
    LstatDir-2   7.59µs ± 0%  7.56µs ± 0%   -0.46%  (p=0.000 n=10+10)
    
    Updates #19922
    
    Change-Id: Ice1fb5825defb05c79bab4dec0692e0fd1bcfcd5
    Reviewed-on: https://go-review.googlesource.com/43071Reviewed-by: 's avatarAustin Clements <austin@google.com>
    Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    6144c727
Name
Last commit
Last update
..
exec Loading commit data...
signal Loading commit data...
user Loading commit data...
dir.go Loading commit data...
dir_plan9.go Loading commit data...
dir_unix.go Loading commit data...
dir_windows.go Loading commit data...
env.go Loading commit data...
env_test.go Loading commit data...
env_unix_test.go Loading commit data...
error.go Loading commit data...
error_plan9.go Loading commit data...
error_posix.go Loading commit data...
error_test.go Loading commit data...
error_unix.go Loading commit data...
error_unix_test.go Loading commit data...
error_windows.go Loading commit data...
error_windows_test.go Loading commit data...
example_test.go Loading commit data...
exec.go Loading commit data...
exec_plan9.go Loading commit data...
exec_posix.go Loading commit data...
exec_unix.go Loading commit data...
exec_windows.go Loading commit data...
executable.go Loading commit data...
executable_darwin.go Loading commit data...
executable_freebsd.go Loading commit data...
executable_plan9.go Loading commit data...
executable_procfs.go Loading commit data...
executable_solaris.go Loading commit data...
executable_test.go Loading commit data...
executable_windows.go Loading commit data...
export_test.go Loading commit data...
export_windows_test.go Loading commit data...
file.go Loading commit data...
file_plan9.go Loading commit data...
file_posix.go Loading commit data...
file_unix.go Loading commit data...
file_windows.go Loading commit data...
getwd.go Loading commit data...
getwd_darwin.go Loading commit data...
os_test.go Loading commit data...
os_unix_test.go Loading commit data...
os_windows_test.go Loading commit data...
path.go Loading commit data...
path_plan9.go Loading commit data...
path_test.go Loading commit data...
path_unix.go Loading commit data...
path_windows.go Loading commit data...
path_windows_test.go Loading commit data...
pipe_bsd.go Loading commit data...
pipe_freebsd.go Loading commit data...
pipe_linux.go Loading commit data...
pipe_test.go Loading commit data...
proc.go Loading commit data...
stat_darwin.go Loading commit data...
stat_dragonfly.go Loading commit data...
stat_freebsd.go Loading commit data...
stat_linux.go Loading commit data...
stat_nacl.go Loading commit data...
stat_netbsd.go Loading commit data...
stat_openbsd.go Loading commit data...
stat_plan9.go Loading commit data...
stat_solaris.go Loading commit data...
stat_unix.go Loading commit data...
stat_windows.go Loading commit data...
sticky_bsd.go Loading commit data...
sticky_notbsd.go Loading commit data...
str.go Loading commit data...
sys.go Loading commit data...
sys_bsd.go Loading commit data...
sys_darwin.go Loading commit data...
sys_freebsd.go Loading commit data...
sys_linux.go Loading commit data...
sys_nacl.go Loading commit data...
sys_plan9.go Loading commit data...
sys_solaris.go Loading commit data...
sys_unix.go Loading commit data...
sys_windows.go Loading commit data...
types.go Loading commit data...
types_plan9.go Loading commit data...
types_unix.go Loading commit data...
types_windows.go Loading commit data...
wait_unimp.go Loading commit data...
wait_wait6.go Loading commit data...
wait_waitid.go Loading commit data...