Skip to content

Commit 494e85f

Browse files
committed
sys.disk_available: speedup
1 parent b524681 commit 494e85f

File tree

5 files changed

+80
-8
lines changed

5 files changed

+80
-8
lines changed

+stdlib/+sys/disk_available.m

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,20 @@
33
t = [];
44

55
if ispc()
6-
dl = extractBefore(stdlib.absolute(p), 2);
7-
cmd = sprintf('pwsh -c "(Get-Volume -DriveLetter ''%s'').SizeRemaining"', dl);
6+
cmd = sprintf('pwsh -c ([System.IO.DriveInfo]''%s'').AvailableFreeSpace', stdlib.absolute(p));
7+
% r = stdlib.root_name(stdlib.absolute(p));
8+
% cmd = sprintf('pwsh -c (Get-CimInstance -ClassName Win32_LogicalDisk -Filter \"DeviceID=''%s''\").FreeSpace', r);
9+
% slower
10+
% dl = extractBefore(stdlib.absolute(p), 2);
11+
% cmd = sprintf('pwsh -c "(Get-Volume -DriveLetter ''%s'').SizeRemaining"', dl);
12+
% slowest
813
elseif ismac()
914
cmd = sprintf('df -k "%s" | awk ''NR==2 {print $4*1024}''', p);
1015
else
1116
cmd = sprintf('df -B1 "%s" | awk ''NR==2 {print $4}''', p);
1217
end
1318

14-
if stdlib.exists(p)
19+
if isunix() || stdlib.exists(p)
1520
[s, t] = system(cmd);
1621
if s == 0
1722
t = str2double(t);

+stdlib/+sys/inode.m

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
%% SYS.INODE get file inode
22

33
function [i, cmd] = inode(file)
4-
arguments
5-
file (1,1) string
6-
end
74

85
i = [];
96

example/BenchmarkDiskAvailable.m

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
classdef (SharedTestFixtures={ matlab.unittest.fixtures.PathFixture("..")}) ...
2+
BenchmarkDiskAvailable < matlab.perftest.TestCase
3+
4+
properties
5+
exist = "."
6+
not_exist = tempname()
7+
fun = @stdlib.disk_available
8+
end
9+
10+
properties(TestParameter)
11+
backend
12+
end
13+
14+
methods (TestParameterDefinition, Static)
15+
function backend = setupBackend()
16+
backend = init_backend('disk_available');
17+
end
18+
end
19+
20+
21+
methods (Test)
22+
23+
function bench_exist(tc, backend)
24+
tc.startMeasuring()
25+
i = tc.fun(tc.exist, backend);
26+
tc.stopMeasuring()
27+
28+
tc.verifyClass(i, 'uint64')
29+
tc.verifyGreaterThan(i, 0)
30+
end
31+
32+
33+
function bench_not_exist(tc, backend)
34+
tc.startMeasuring()
35+
i = tc.fun(tc.not_exist, backend);
36+
tc.stopMeasuring()
37+
38+
tc.verifyClass(i, 'uint64')
39+
tc.assertEmpty(i)
40+
end
41+
42+
end
43+
44+
end
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
function [r, s] = BenchmarkDiskAvailableRun()
2+
tname = "BenchmarkDiskAvailable";
3+
4+
%% Exist
5+
r.same = run_bench(tname + "/bench_exist");
6+
s.exist = sampleSummary(r.same);
7+
disp(sortrows(s.exist, "Median"))
8+
%% Not Exist
9+
r.not = run_bench(tname + "/bench_not_exist");
10+
s.not = sampleSummary(r.not);
11+
disp(sortrows(s.not, "Median"))
12+
13+
end
14+
15+
16+
function result = run_bench(name)
17+
suite = testsuite(name);
18+
exp = matlab.perftest.TimeExperiment.limitingSamplingError(MaxSamples=20, RelativeMarginOfError=0.1);
19+
result = exp.run(suite);
20+
end

example/BenchmarkGetOwner.m

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
classdef (SharedTestFixtures={ matlab.unittest.fixtures.PathFixture("..")}) ...
22
BenchmarkGetOwner < matlab.perftest.TestCase
33

4+
properties
5+
exist = '.'
6+
not_exist = tempname()
7+
fun = @stdlib.get_owner
8+
end
9+
410
properties(TestParameter)
511
backend
612
end
@@ -16,7 +22,7 @@
1622

1723
function bench_exist(tc, backend)
1824
tc.startMeasuring()
19-
o = stdlib.get_owner('.', backend);
25+
o = tc.fun(tc.exist, backend);
2026
tc.stopMeasuring()
2127

2228
tc.verifyClass(o, 'string')
@@ -26,7 +32,7 @@ function bench_exist(tc, backend)
2632

2733
function bench_not_exist(tc, backend)
2834
tc.startMeasuring()
29-
o = stdlib.get_owner('not-exist', backend);
35+
o = tc.fun(tc.not_exist, backend);
3036
tc.stopMeasuring()
3137

3238
tc.verifyClass(o, 'string')

0 commit comments

Comments
 (0)