Changeset 3285

Show
Ignore:
Timestamp:
04/27/08 14:44:47 (3 months ago)
Author:
dgollub
Message:

Speed up osync_db database queries

g_list_append calls g_list_last() internally, which is traverse the
entire listn every time. Calling g_list_prepend() and later reverse
the entire list, is more efficient.

good: O((2)N) bad: O(N²)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/opensync/db/opensync_db.c

    r3267 r3285  
    190190                GList *row = NULL; 
    191191                for (i=0; i < numcolumns; i++) 
    192                         row = g_list_append(row, g_strdup(result[column_count++])); 
    193  
    194                 table = g_list_append(table, row); 
    195         } 
     192                        /* speed up - prepend instead of append */ 
     193                        row = g_list_prepend(row, g_strdup(result[column_count++])); 
     194 
     195                /* items got prepended, reverse the list again */ 
     196                row = g_list_reverse(row); 
     197 
     198                /* speed up - prepend instead of append. */ 
     199                table = g_list_prepend(table, row); 
     200        } 
     201 
     202        /* items got prepended, reverse the list again */ 
     203        table = g_list_reverse(table); 
    196204 
    197205        sqlite3_free_table(result);