Database read optimizations
Hard to believe there was still more room to improve on this, but I found an easily correctable oversight tonight. Our databases (both sync and local) contain many blank lines, and we were not moving onto the next line right away in these cases; instead we would proceed through our strcmp() conditional checks as normal. Some local numbers follow to show the effects of this patch: Sync `-Ss foobarbaz`: 71,709 blank lines skipped early ~1,505,889 strcmp() calls avoided (21 per line) ~15% speed improvement (.210 --> .179 sec) Local `-Qs foobarbaz`: 6,823 blank lines skipped early 115,991 strcmp() calls avoided (17 per line) ~6% speed improvement (.080 -> .071 sec) Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
parent
040083b97f
commit
b221af660d
2 changed files with 11 additions and 2 deletions
|
@ -580,7 +580,13 @@ static int local_db_read(alpm_pkg_t *info, alpm_dbinfrq_t inforeq)
|
|||
goto error;
|
||||
}
|
||||
while(!feof(fp)) {
|
||||
READ_NEXT();
|
||||
if(fgets(line, sizeof(line), fp) == NULL && !feof(fp)) {
|
||||
goto error;
|
||||
}
|
||||
if(_alpm_strip_newline(line) == 0) {
|
||||
/* length of stripped line was zero */
|
||||
continue;
|
||||
}
|
||||
if(strcmp(line, "%NAME%") == 0) {
|
||||
READ_NEXT();
|
||||
if(strcmp(line, info->name) != 0) {
|
||||
|
|
|
@ -526,7 +526,10 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
|
|||
int ret;
|
||||
while((ret = _alpm_archive_fgets(archive, &buf)) == ARCHIVE_OK) {
|
||||
char *line = buf.line;
|
||||
_alpm_strip_newline(line);
|
||||
if(_alpm_strip_newline(line) == 0) {
|
||||
/* length of stripped line was zero */
|
||||
continue;
|
||||
}
|
||||
|
||||
if(strcmp(line, "%NAME%") == 0) {
|
||||
READ_NEXT();
|
||||
|
|
Loading…
Add table
Reference in a new issue