擅长:python、mysql、java
<p>在我的系统(Windows10,Python3.7)上,您的代码在不到10微秒的时间内一直运行,所以代码中没有明显的错误。在</p>
<p>注意:您应该使用<a href="https://docs.python.org/3.7/library/time.html#time.perf_counter" rel="nofollow noreferrer">^{<cd1>}</a>而不是<code>time.time()</code>来衡量性能。<code>time.time()</code>的粒度可能非常糟糕(“<em>并非所有系统都提供比1秒更精确的时间</em>”)。当与其他系统比较计时时,可能会得到奇怪的结果。在</p>
<p>我最好的猜测是seek会触发一些缓冲(read ahead)操作,这可能会很慢,这取决于您的系统。在</p>
<p>根据文件:</p>
<blockquote>
<p>Binary files are buffered in fixed-size chunks; the size of the buffer is chosen using a heuristic trying to determine the underlying device’s “block size” and falling back on <code>io.DEFAULT_BUFFER_SIZE</code>. On many systems, the buffer will typically be 4096 or 8192 bytes long.</p>
</blockquote>
<p>您可以尝试通过将参数<code>buffering=0</code>添加到<code>open()</code>来禁用缓冲,并检查这是否会产生影响:</p>
<pre class="lang-py prettyprint-override"><code>open(filename, 'r+b', buffering=0)
</code></pre>