0
我有一個ObservableCollection,其中Item有2個屬性(例如:Name和Id),collection包含12k個元素。所以,我有一個文本框,我想搜索元素,哪些名稱包含我的文本框的值,並將這些元素添加到新集合中。如何在ObservableCollection中實現並行搜索?
in real-proj: Silverlight,TreeView(它的ItemSource是我的集合),它動態地改變。和TreeView在UI中改變。
我的問題只是在緩慢渲染搜索結果。我的事情,如果它會平行 - 它可以節省我。
例如,一些代碼即時通訊使用:
private ObservableCollection<ICDDocumentItemViewModel> LinearSearch(string searchText)
{
var filteredCollection = new ObservableCollection<ICDDocumentItemViewModel>();
if (searchText.Length > 3)
{
foreach (var itemViewModel in _linearCollection)
{
if (!itemViewModel.Model.Name.ToLower().Contains(searchText.ToLower())) continue;
if (itemViewModel.Children.Count != 0)
{
itemViewModel.IsExpanded = true;
}
filteredCollection.Add(itemViewModel);
}
}
if(searchText.Length <= 3)
{
return new ObservableCollection<ICDDocumentItemViewModel>(ICDItemsViewModelsMain);
}
return filteredCollection;
}
謝謝,但它仍然緩慢渲染,10秒凍結。 –
它工作良好時,即時輸入名稱的項目,這很少,但如果我使用像「疾病」(IM過濾詞彙表的診斷名稱) - 它的工作很難,因爲幾乎每個第三個元素包含該文本 –
好吧,註釋掉DetectChildren方法內部的代碼,看看事情是否加速 - 過濾本身不應該有任何問題... –