Commit a3f4457b authored by Antoine Pitrou's avatar Antoine Pitrou

Speed up reading of small files. This avoids multiple C read() calls on pyc files.

parent 006917ec
...@@ -572,6 +572,7 @@ new_buffersize(fileio *self, size_t currentsize ...@@ -572,6 +572,7 @@ new_buffersize(fileio *self, size_t currentsize
#endif #endif
) )
{ {
size_t addend;
#ifdef HAVE_FSTAT #ifdef HAVE_FSTAT
if (end != (Py_off_t)-1) { if (end != (Py_off_t)-1) {
/* Files claiming a size smaller than SMALLCHUNK may /* Files claiming a size smaller than SMALLCHUNK may
...@@ -589,9 +590,16 @@ new_buffersize(fileio *self, size_t currentsize ...@@ -589,9 +590,16 @@ new_buffersize(fileio *self, size_t currentsize
} }
#endif #endif
/* Expand the buffer by an amount proportional to the current size, /* Expand the buffer by an amount proportional to the current size,
giving us amortized linear-time behavior. Use a less-than-double giving us amortized linear-time behavior. For bigger sizes, use a
growth factor to avoid excessive allocation. */ less-than-double growth factor to avoid excessive allocation. */
return currentsize + (currentsize >> 3) + 6; if (currentsize > 65536)
addend = currentsize >> 3;
else
addend = 256 + currentsize;
if (addend < SMALLCHUNK)
/* Avoid tiny read() calls. */
addend = SMALLCHUNK;
return addend + currentsize;
} }
static PyObject * static PyObject *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment