Замена очереди C tailq для проблем с производительностью - PullRequest
2 голосов
/ 17 февраля 2012

У меня есть tailq со 100k + записями этой структуры:

struct entry {
char *file_name;
FILE *file;
TAILQ_ENTRY(entry) tailq;
};

Цель состоит в том, чтобы хранить тысячи файловых указателей, чтобы приложение создавало тысячи файлов и добавляло к ним материалы.При каждом увеличении tailq у меня есть foreach:

int c;
char temp[20];

struct entry *np;

TAILQ_FOREACH(np, &tailq_head[y], tailq) {
    if(strcmp(np->file_name, temp) == 0){
        c = 1;
        break;
    }
}

, который ищет какое-то временное имя, которое уже находится в tailq, если его нет в хвосте, то добавьте id, иначе нет.

Что я могу сделать, чтобы улучшить производительность?Какую более быструю структуру я могу использовать?Должен ли я вычислять целочисленный хэш для переменной temp, которую нужно сравнить в foreach?Идеи?

1 Ответ

2 голосов
/ 17 февраля 2012

Сохранение целочисленного хэша имени в каждой записи значительно ускорит сравнение. Это также сохранит один уровень косвенности указателя. Но вы все равно сравниваете каждую запись. Если вы храните записи в структуре, которая обеспечивает эффективный поиск без сравнения с каждой отдельной записью, например, в хеш-таблице, выигрыш в производительности будет еще больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...