0

修正: 缺少物業CompletionInterval = 「0」爲什麼自動完成擴展工作很慢的ASP.NET

我測試Ajax的自動完成擴展和web服務的功能。並發現自動完成擴展程序需要一段時間來獲取數據和顯示。我目前沒有數據庫連接或類似的東西。我只是將所有項目放入webservice函數的一個數組中,並使用LINQ返回匹配的項目集。數據顯示大約有1秒的差距。我嘗試開啓/關閉EnableCaching,我發現有人建議在博客上,但它仍然很慢,比較谷歌搜索數十億數據的方式,並將帶有數十億用戶的實時網站上的結果返回給用戶,而不會造成第二次延遲。

儘管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。

這裏是Web服務代碼..

<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 
+0

代碼VB是不是有在AutoCompleteExtender的延遲特性? CompletionInterval我認爲。 –

+1

另請檢查您的數據是否不通過其他路由,如代理服務器。我有這樣的工作,並且Ajax請求有時需要一分鐘才能返回。 – leppie

+0

嗨邁克和Leppie ..我再次通過屬性掃描,並設置CompletionInterval =「0」,那麼它現在工作非常快。真是太棒了!非常感謝.. – lawphotog

回答

3

沒有在AutoCompleteExtender的延遲特性? CompletionInterval我認爲。

0

正確的方法是添加CompletionInterval="xxx"其中xxx是以毫秒爲單位的超時。 (Tools是我的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"/> 

背後

<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