Silverlight AutoCompletebox는 첫 번째 "검색"에서 응답하는 데 오랜 시간이 걸립니다.
-
08-07-2019 - |
문제
약 2000 개의 필드의 약 2000 개 객체를 자동 완성 상자에로드하는 Silverlight 애플리케이션이 있습니다. 그런 다음 필터가 네 개의 필드 중 하나에서 검색하도록 설정됩니다. 두 문자 후 검색을 시작하도록 설정했습니다.
그러나 객체 목록을 채운 후 처음으로 두 번째 문자 (상자가 채워지기 시작할 때)를 입력하면 자동 완성 상자는 응답하는 데 약 6-7 초가 걸립니다.
이것을 최적화 할 수있는 방법에 대한 아이디어가 있습니까?
사용자가 입력을 시작하기를 기다리는 대신 목록이 채워진 직후에 이러한 시각적 요소를 만들 수있는 방법이 있습니까?
해결책
Alreay는 최소 펌프 픽스 길이 프로피어를 조정 했습니까? 문자가 더 많을수록 필터링이 더 좋습니다.
현재, 접두사가 낮 으면 2000 개 이상의 시각적 요소가 생성되는 2000 개 이상의 시각적 요소가 있습니다. 마이너스는 다른 최적화에 관계없이 필터링의 한 특성을 사용합니다.
또 다른 옵션은 자신의 배경 스레드 필터링을 구현하는 것이지만, 이는 제어를위한 많은 목적 (예 : 단순성)을 물리칩니다.
다른 팁
그것은 버그입니다 자동 완성 상자 제어.
드롭 다운이 처음 열리면 UI 가상화 사용되지 않고 제어하면 모든 항목이 생성됩니다.
이 문제를 해결하려면 설정해야합니다 Maxheight 에게 그리드 드롭 다운 팝업 AutoCompleteBox에서 ControlTemplate. 이것은이 controlTemplate의 XAML 부분입니다.
<ControlTemplate TargetType="sdk:AutoCompleteBox">
<Grid Opacity="{TemplateBinding Opacity}">
...
<Popup x:Name="Popup">
<Grid Opacity="{TemplateBinding Opacity}" MaxHeight="450">
<Border x:Name="PopupBorder" BorderThickness="0" Background="#11000000" HorizontalAlignment="Stretch" Opacity="0">
<Border.RenderTransform>
<TranslateTransform X="1" Y="1"/>
</Border.RenderTransform>
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0" HorizontalAlignment="Stretch" Opacity="1.0" Padding="0">
<Border.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFDDDDDD" Offset="0"/>
<GradientStop Color="#AADDDDDD" Offset="1"/>
</LinearGradientBrush>
</Border.Background>
<Border.RenderTransform>
<TransformGroup>
<TranslateTransform X="-1" Y="-1"/>
</TransformGroup>
</Border.RenderTransform>
<ListBox x:Name="Selector" BorderThickness="0" Background="{TemplateBinding Background}" Foreground="{TemplateBinding Foreground}" ScrollViewer.HorizontalScrollBarVisibility="Auto" ItemTemplate="{TemplateBinding ItemTemplate}" ItemContainerStyle="{TemplateBinding ItemContainerStyle}" ScrollViewer.VerticalScrollBarVisibility="Auto"/>
</Border>
</Border>
</Grid>
</Popup>
</Grid>
</ControlTemplate>
이것은 나를 위해 작동합니다.