2012-02-16 50 views
2

我有這個結構的100K +條目的tailq:性能ç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一些臨時的名稱,如果不是尾部再加入ID,否則不執行。

如何提高性能?我可以使用哪種更快的結構?我應該計算一個整數哈希值的臨時變量來比較foreach嗎?想法?

+0

文件的順序是否重要? – 2012-02-16 21:57:00

+0

@MarceloCantos no – 2012-02-16 22:01:04

回答

2

在每個條目中保留名稱的整數散列會加快比較的速度。它也將保存一個級別的指針間接。但是你仍然在比較每一個條目。如果將條目存儲在提供高效搜索的結構中,而無需比較每個條目(如散列表),則性能優勢將更大。

+0

您能否提供這些結構的任何示例以提供有效的搜索? – 2012-02-16 21:58:59

+0

我提出了一個[哈希表](http://en.wikipedia.org/wiki/Hash_table),這可能是最自然的選擇。由於訂單無關緊要,你選擇付出高昂的代價保證他們沒有任何結果。 – 2012-02-16 22:38:25

+0

在某些linux庫上是否存在散列表的實現? – 2012-02-16 22:53:40