2012-02-16 11 views
2

を発行します他CのTAILQキュー置換は、私は、この構造体の100K +エントリを持つTAILQを持っている

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のを持っているTAILQの各増加に

パフォーマンスを向上させるにはどうすればよいですか?私が使用できるより速い構造は何ですか? foreach内で比較されるtemp変数に対する整数ハッシュを計算する必要がありますか?アイデア?

+0

ファイルの順序は関係しますか? –

+0

@MarceloCantosいいえ –

答えて

2

各エントリに名前の整数ハッシュを保持すると、比較が大幅に高速化されます。 1レベルのポインタ間接指定も保存されます。しかし、あなたはまだすべての単一のエントリと比較しています。エントリを、ハッシュテーブルのようにすべての単一のエントリと比較せずに効率的な検索を提供する構造体に格納すると、パフォーマンス上の利点はさらに大きくなります。

+0

効率的な検索を提供する構造の例を挙げることができますか? –

+0

私は[ハッシュテーブル](http://en.wikipedia.org/wiki/Hash_table)を提案しました。これはおそらく最も自然な選択です。注文は問題ではないので、注文を保つという高い価格を支払うという選択は何もしません。 –

+0

Linuxのライブラリにハッシュテーブルの実装がありますか? –

関連する問題