Почему AutoComplete Extender работает очень медленно ASP.NET

Исправлено: отсутствует свойство CompletionInterval="0"

Я тестирую функциональные возможности расширителя автозаполнения ajax и веб-сервисов. И обнаружил, что автозаполнение расширителя займет некоторое время для извлечения данных и отображения. У меня нет подключения к базе данных или что-то подобное в данный момент. Я просто помещаю все элементы в массив в функцию веб-сервиса и возвращаю соответствующий набор элементов, используя LINQ. Существует около 1 секунды, показывая данные. Я попытался включить / выключить EnableCaching, который, как я обнаружил, кто-то предложил в блоге, но он все еще очень медленно сравнивает, как Google ищет миллиарды данных и возвращает результат на реальном веб-сайте с миллиардами пользователей без доли секунды.

Хотя Google не будет использовать asp.net, Linq или менеджер сценариев для работы Ajax, я просто тестирую на своем локальном компьютере без подключения к базе данных, я предполагаю, что должен быть способ заставить его работать быстрее. Вероятно, я пропустил где-то установить настройку. Вот мой код

ASPX

    <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
    </asp:ToolkitScriptManager>

    <asp:TextBox ID="TextBox1" runat="server" Width="200px"></asp:TextBox>

    <asp:AutoCompleteExtender ID="TextBox1_AutoCompleteExtender" runat="server" ServiceMethod="HelloWorld" MinimumPrefixLength="1" EnableCaching="false" CompletionListCssClass="CompletionListCssClass"
    DelimiterCharacters="" Enabled="True" ServicePath="WebService.asmx" TargetControlID="TextBox1"> 
    </asp:AutoCompleteExtender>
    <br />
    <asp:Button ID="Button1" runat="server" Text="Search" />

Там нет ничего на code_behind.

Вот код для веб-сервиса..

    <System.Web.Script.Services.ScriptService()> _
    <WebService(Namespace:="http://tempuri.org/")> _
    <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Public Class WebService
    Inherits System.Web.Services.WebService

    <WebMethod()> _
    Public Function HelloWorld(prefixText As String) As String()

    Dim str() As String = {"Afghanistan", "Albania", "Algeria", "Andorra", "Angola", "Antigua and Barbuda", "Argentina", "Armenia", "Australia", "Austria", "Azerbaijan",
                            "Bahamas", "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium", "Belize", "Benin", "Bhutan", "Bolivia", "Bosnia and Herzegovina", "Botswana", "Brazil", "Brunei",
                            "Bulgaria", "Burkina Faso", "Burundi", "Cambodia", "Cameroon", "Canada", "Cape Verde", "Central African Republic",
                            "Chad", "Chile", "China", "Colombi", "Comoros", "Congo (Brazzaville)", "Congo", "Costa Rica", "Cote d'Ivoire", "Croatia", "Cuba", "Cyprus",
                            "Czech Republic", "Denmark", "Djibouti", "Dominica", "Dominican Republic", "East Timor (Timor Timur)", "Ecuador", "Egypt", "El Salvador",
                            "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia", "Fiji", "Finland", "France", "Gabon", "Gambia, The", "Georgia", "Germany", "Ghana",
                            "Greece", "Grenada", "Guatemala", "Guinea", "Guinea-Bissau", "Guyana", "Haiti", "Honduras", "Hungary", "Iceland", "India", "Indonesia",
                            "Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica", "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Korea, North",
                            "Korea, South", "Kuwait", "Kyrgyzstan", "Laos", "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania",
                            "Luxembourg", "Macedonia", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands", "Mauritania", "Mauritius",
                            "Mexico", "Micronesia", "Moldova", "Monaco", "Mongolia", "Morocco", "Mozambique", "Myanmar", "Namibia", "Nauru", "Nepa", "Netherlands",
                            "New Zealand", "Nicaragua", "Niger", "Nigeria", "Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay",
                            "Peru", "Philippines", "Poland", "Portugal", "Qatar", "Romania", "Russia", "Rwanda", "Saint Kitts and Nevis", "Saint Lucia", "Saint Vincent",
                            "Samoa", "San Marino", "Sao Tome and Principe", "Saudi Arabia", "Senegal", "Serbia and Montenegro", "Seychelles", "Sierra Leone", "Singapore",
                            "Slovakia", "Slovenia", "Solomon Islands", "Somalia", "South Africa", "Spain", "Sri Lanka", "Sudan", "Suriname", "Swaziland", "Sweden", "Switzerland",
                            "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "Togo", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey", "Turkmenistan", "Tuvalu", "Uganda",
                            "Ukraine", "United Arab Emirates", "United Kingdom", "United States", "Uruguay", "Uzbekistan", "Vanuatu", "Vatican City", "Venezuela", "Vietnam",
                            "Yemen", "Zambia", "Zimbabwe"}

    Dim result As ArrayList = Nothing

    Dim query = From x In str
                Where x.ToLower.Contains(prefixText)
                Select x

    Return query.ToArray

    End Function

    End Class

2 ответа

Решение

Нет ли свойства задержки в AutoCompleteExtender? Завершение Интервал я думаю.

Правильный метод - добавить CompletionInterval="xxx" где xxx - время ожидания в миллисекундах. (Инструменты - это мое определение ajaxtools)

        <asp:TextBox runat="server" ID="Search" CssClass="search" AutoPostBack="true" />

        <Tools:AutoCompleteExtender
            ID="Search_AutoCompleteExtender"
            runat="server"
            CompletionInterval="250" 
            MinimumPrefixLength="3" 
            DelimiterCharacters=""
            ServiceMethod="GetCompletionKeyList"
            ServicePath="Keys.Aspx"
            Enabled="True"
            CompletionListCssClass="CompletionListCssClass"
            CompletionListItemCssClass="CompletionListItemCssClass"
            CompletionListHighlightedItemCssClass="CompletionListHighlightedItemCssClass"
            TargetControlID="Search"/>

на код VB позади

<System.Web.Services.WebMethod>
<System.Web.Script.Services.ScriptMethod()>
Public Shared Function GetCompletionKeyList(prefixText As String, count As Integer) As String()
      return {"Your", prefixText, "selection" }
end Function
Другие вопросы по тегам