在下面的代码中,为什么Matlab在快速读取和慢速读取之间交替显示?

时间:2018-08-12 22:46:10

标签: matlab io fread

我正在从硬盘读取矩阵的代码中遇到一些奇怪的行为。

我首先将包含矩阵a的二进制文件写入硬盘:

N=17000;
a=rand(N);
fid=fopen('a','Wb');
fwrite(fid, a, 'double');
fclose(fid); 

现在,我尝试读取打开,读取和关闭文件的过程,以了解整个过程需要花费多长时间。每次迭代应花费相同的时间。

for ii=1:10
tic
fid = fopen('a', 'r');
matrix=fread(fid, [N, N], 'double');
fclose(fid);
toc
end

有趣的是,读取文件所花的时间在快慢之间交替!有什么解释吗?以下是上述循环的时间:

Elapsed time is 1.259988 seconds.
Elapsed time is 2.454427 seconds.
Elapsed time is 1.534250 seconds.
Elapsed time is 2.453246 seconds.
Elapsed time is 1.535322 seconds.
Elapsed time is 2.454762 seconds.
Elapsed time is 1.534847 seconds.
Elapsed time is 2.449777 seconds.
Elapsed time is 1.534265 seconds.
Elapsed time is 2.449074 seconds.

1 个答案:

答案 0 :(得分:1)

这很有趣,我想知道它是否与打开文件关闭文件的前面有关。测试这种可能性的一种方法可能是在循环中添加delay(2),然后查看时间是否匹配。