我有一个包含该结构 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,否则不添加。
我可以做些什么来提高性能?我可以使用哪种更快的结构?我应该计算要在 foreach 中比较的 temp 变量的整数哈希值吗?有想法吗?
最佳答案
在每个条目中保留名称的整数散列将大大加快比较速度。它还将节省一级指针间接寻址。但您仍在与每个条目进行比较。如果您将条目存储在可提供高效搜索的结构中,而无需与每个条目进行比较(例如哈希表),那么性能优势将会更大。
关于C tailq队列替换解决性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9319630/