2012-05-05 42 views
1

私はコメントでこれを尋ねましたが、私は最初のコメントについて2番目の質問をするはずです。私はAutoCompleteExtenderを持っていて、それは非常に遅いです。私のリストをAutoCompleteExtenderを満たすために取得するメソッドは、毎回APIからXMLを取得し、クエリしなければなりません。問題は私のメソッドです。このメソッドの内部では、同じページの静的メソッドからSessonState、Cookie、さらには変数にアクセスすることができないため、毎回GETとQueryの代替手段はありません。これは遅いですが、本当に価値がありません。これを高速に実行するには、別の方法(AJAXツールキットを使用していない可能性があります)が必要です。AutoCompleteExtender非常に遅い

[System.Web.Script.Services.ScriptMethod()] 
[System.Web.Services.WebMethod] 
public static List<string> GetNames(string prefixText, int count) 
{ 
    //Code Here Takes long 
} 
+0

エクステンダーの「CompletionInterval」、「CompletionSetCount」、「MinimumPrefixLength」のいずれかのプロパティで演奏したことがありますか?おそらくあなたはそれを使用可能にする適切なバランスを見つけることができます –

答えて

1

編集CompletionInterval、CompletionSetCount、およびMinimumPerfixLengthは何も近づきません。

これは非常に一般的な問題です - AJAX TextboxCompleteExtenderは毎回データを照会するため非常に時間がかかります - CodePlexは他の誰かがこの問題に遭遇したときにこの問題に対する素晴らしいオープンソースソリューションを持っています。

0

特定の解決策に進む前に、パフォーマンスボトルネックがどこにあるのか把握する必要があります。これは、ルックアップを増やすために変更/修正を行う必要がある場合に役立ちます。

あなたは(あなたが高速接続を持っていると仮定)をチェックする必要がある2つの側面があります。

  1. サーバー側: サーバーはすぐに電話を返すことを確認してください。 小さな配列の文字列を返すようにしてください(バックエンドのデータ検索は実行しないでください)。パフォーマンスが大幅に向上した場合は、サービス/データレイヤーコードに問題があり、そのパフォーマンスを最適化する必要があることを意味します。

  2. クライアント側:クライアント側の最大の要因の1つは、CompletionIntervalプロパティです。 Visual studioによって設定されるデフォルト値は1000ミリ秒です。私はそれを10に変更し、より速くなった。

私の場合、ボトルネックはコントロール構成自体にありました。私のサーバー側はすでに高速でした。なぜなら私はtrie structureを使って高速バックエンドデータの検索と検索を行っていました。 私はまた、レコードの小さな配列を返し、クライアントサイドキャッシングをオンにしました。最大の要因はCompletionIntervalでした。

+0

次のように対処するために編集してください:#1:事前計算入力を提供する擬似方法を提案しようとしていますか? #2:質問に対する妥当性は何ですか? 「レコードの小さな配列を返す」とはどういう意味ですか? – Superbest