1

開発中のフォーム内にいくつかのオートコンプリート フィールドがあります。私の最大のものはほぼ20kのレコードを含み、最小のものは約1kを含みます。これまで、このタスクを処理するために TreeMap を使用していましたが、非常に効率的ではないことがわかりました。私の現在の構造はこのように見えました。

private SortedMap<String, Set<String>> cache;

public AutocompleteCacheServiceImpl() {
    cache = Collections.synchronizedSortedMap(new TreeMap<String, Set<String>>());
}

このように人口が集中している間、

private void populateCache(String id, String name) {
    int len = name.length();

    for (int i = 1; i <= len; i++) {
        String key = name.substring(0, i).toLowerCase();
        if(this.cache.containsKey(key)) {
            Set<String> exist = cache.get(key);
            if(!exist.contains(id)) {                
                exist.add(id);
            }                
        } else {
            Set<String> _e = new HashSet<String>();
            _e.add(id);
            this.cache.put(key, _e);
        }

    }        
}

出力 1 時間 1 時間 1 時間 1 時間 1 時間

キャッシュの実装を Ehcache のようなものに置き換えたいと思っていましたが、あまり詳しくありません。キーストロークの応答時間が 500 ミリ秒以下になるように、このような設定を行うことに関する推奨事項があるかどうか疑問に思っています。

このページを見ましたhttp://ehcache.org/documentation/get-started/getting-started

しかし、おそらく私の現在の入力方法により、より良いアプローチを見過ごされている可能性があります。

誰か考えがありますか?

4

1 に答える 1

0

パフォーマンスの最適化を検討している場合は、パトリシアの試行を見てください。SortedMap を実装する実装がここにあります。

于 2012-06-06T15:39:41.197 に答える