0
0
mirror of https://github.com/vim/vim.git synced 2025-09-29 04:34:16 -04:00

patch 8.1.1439: json_encode() is very slow for large results

Problem:    Json_encode() is very slow for large results.
Solution:   In the growarray use a growth of at least 50%. (Ken Takata,
            closes #4461)
This commit is contained in:
Bram Moolenaar
2019-06-01 14:36:26 +02:00
parent 815b76bff6
commit c47ed44be7
2 changed files with 9 additions and 0 deletions

View File

@@ -2057,6 +2057,13 @@ ga_grow(garray_T *gap, int n)
{ {
if (n < gap->ga_growsize) if (n < gap->ga_growsize)
n = gap->ga_growsize; n = gap->ga_growsize;
// A linear growth is very inefficient when the array grows big. This
// is a compromise between allocating memory that won't be used and too
// many copy operations. A factor of 1.5 seems reasonable.
if (n < gap->ga_len / 2)
n = gap->ga_len / 2;
new_len = gap->ga_itemsize * (gap->ga_len + n); new_len = gap->ga_itemsize * (gap->ga_len + n);
pp = vim_realloc(gap->ga_data, new_len); pp = vim_realloc(gap->ga_data, new_len);
if (pp == NULL) if (pp == NULL)

View File

@@ -767,6 +767,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1439,
/**/ /**/
1438, 1438,
/**/ /**/