mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-09-19 18:47:54 +08:00
Merge pull request #6 from jimmytaker/omaster
Use bigger buffer when reading big blobs to increase performance
This commit is contained in:
@@ -604,18 +604,18 @@ void*
|
|||||||
mdb_ole_read_full(MdbHandle *mdb, MdbColumn *col, size_t *size)
|
mdb_ole_read_full(MdbHandle *mdb, MdbColumn *col, size_t *size)
|
||||||
{
|
{
|
||||||
char ole_ptr[MDB_MEMO_OVERHEAD];
|
char ole_ptr[MDB_MEMO_OVERHEAD];
|
||||||
char *result = malloc(MDB_BIND_SIZE);
|
char *result = malloc(MDB_BIND_SIZE * 64);
|
||||||
size_t result_buffer_size = MDB_BIND_SIZE;
|
size_t result_buffer_size = MDB_BIND_SIZE * 64;
|
||||||
size_t len, pos;
|
size_t len, pos;
|
||||||
|
|
||||||
memcpy(ole_ptr, col->bind_ptr, MDB_MEMO_OVERHEAD);
|
memcpy(ole_ptr, col->bind_ptr, MDB_MEMO_OVERHEAD);
|
||||||
|
|
||||||
len = mdb_ole_read(mdb, col, ole_ptr, MDB_BIND_SIZE);
|
len = mdb_ole_read(mdb, col, ole_ptr, MDB_BIND_SIZE * 64);
|
||||||
memcpy(result, col->bind_ptr, len);
|
memcpy(result, col->bind_ptr, len);
|
||||||
pos = len;
|
pos = len;
|
||||||
while ((len = mdb_ole_read_next(mdb, col, ole_ptr))) {
|
while ((len = mdb_ole_read_next(mdb, col, ole_ptr))) {
|
||||||
if (pos+len >= result_buffer_size) {
|
if (pos+len >= result_buffer_size) {
|
||||||
result_buffer_size += MDB_BIND_SIZE;
|
result_buffer_size += MDB_BIND_SIZE * 64;
|
||||||
result = realloc(result, result_buffer_size);
|
result = realloc(result, result_buffer_size);
|
||||||
}
|
}
|
||||||
memcpy(result + pos, col->bind_ptr, len);
|
memcpy(result + pos, col->bind_ptr, len);
|
||||||
|
Reference in New Issue
Block a user