I'm facing with big performance issue while I'm trying to filter ICollectionView.
Collection is populated with about 90000 rows (12 columns).
What I've tried to this very moment:
- used
VirtualizingStackPanel.IsVirtualizingWhenGrouping - enabled
RowVirtualizationandColumnVirtualization - used
Dispatcher(still don't know what for and why)
Here I provide code, that shows what I'm trying to complete:
private ICollectionView abcdxView;
public ICollectionView AbcdxView
{
get
{
if (abcdxView == null)
{
abcdxView = CollectionViewSource.GetDefaultView(context.ut_abcdx.ToList());
}
return abcdxView;
}
set
{
abcdxView = value;
OnPropertyChanged("AbcdxView");
}
}
private void UpdateAbcdxFilter()
{
dispatcher.BeginInvoke(new Action(() =>
abcdxView.Filter = w =>
(string.IsNullOrEmpty(IndeksFilter) ? true : StringFilter.Like(((ut_abcdx)w).indeks, IndeksFilter))));
}
private string indeksFilter;
public string IndeksFilter
{
get { return indeksFilter; }
set
{
indeksFilter = value;
UpdateAbcdxFilter();
OnPropertyChanged("IndeksFilter");
}
}
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding AbcdxView,UpdateSourceTrigger=PropertyChanged}"
RowDetailsVisibilityMode="VisibleWhenSelected"
EnableColumnVirtualization="True" VirtualizingStackPanel.IsVirtualizingWhenGrouping="True" EnableRowVirtualization="True">
public static bool Like(string toSearch, string toFind)
{
if (toSearch != null)
{
Regex findRegex = new Regex(Regex.Escape(toFind).Replace("%", ".*"), RegexOptions.IgnoreCase);
return findRegex.IsMatch(toSearch);
}
return false;
}
I must admit that StartsWith method in UpdateFilter() works much faster, but it's not what I expect.
I have no more ideas how to manage that. Can you help ?