我有一个包含100k+条目的tailq:

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上的一些临时名称,如果它不在tailq中,那么添加id,否则就不在tailq中。
我能做些什么来提高性能我能用的更快的结构是什么我应该计算一个整数散列到要在foreach中比较的temp变量吗思想?

最佳答案

在每个条目中保留名称的整数散列将大大加快比较速度它还将保存一级指针间接寻址但你仍然在和每一个条目进行比较如果将条目存储在一个提供高效搜索的结构中,而不与每个条目(如哈希表)进行比较,那么性能优势将更大。

关于c - 用C tailq队列替换性能问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9319630/

10-11 03:53