C tailq队列替换解决性能问题

标签 c queue

我有一个包含该结构 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/

相关文章:

c - 指向字符数组指针的指针

java - 队列的数组实现

c# - MSMQ 消息在同一台机器上总是延迟恰好 3 分钟到达

c# - 具有自动大小限制管理的 ThreadSafe FIFO 列表

c - C 程序将标准输出的小写字母转换为大写字母的小问题

c - 在 Linux 上连接硬件安全模块

c++ - 在递归函数中通过引用传递的数组 - 最后一列重新初始化

c++ - 我们如何在 C++ 实现文件中包含结构?

java - 我无法弄清楚我的代码、队列和java中的某些部分

c - 具有静态变量的信号处理程序中的竞争条件