Hey,
ich hab ein Problem mit der Performance in folgender Sub:
Diese Codestellen stehen damit in Verbindung:
In meinem Fall hat die ObservableColletion
Also
Wenn ich die Suche nun zurücksetze, dann dauert es eine Ewigkeit, bis die Sub abgearbeitet ist, bzw. das Programm hängt sogar fest.
Hat jemand eine Idee, wie ich das performanter gestalten kann?
ich hab ein Problem mit der Performance in folgender Sub:
VB.NET-Quellcode
- Public Sub SucheZuruecksetzen_Execute(obj As Object)
- Mouse.OverrideCursor = System.Windows.Input.Cursors.Wait
- TextFilter = ""
- BPMMin = 0
- If MainModule.InhaltGesamt.Count > 0 Then
- BPMMax = MainModule.InhaltGesamt.Max(Function(x) x.BPM)
- Else
- BPMMax = 999
- End If
- For Each item In AnzuzeigendeGenres
- item.IstSelektiert = True
- Next
- Mouse.OverrideCursor = System.Windows.Input.Cursors.Arrow
- 'RefreshView()
- End Sub
Diese Codestellen stehen damit in Verbindung:
VB.NET-Quellcode
- Public Property TextFilter() As String
- Get
- If _TextFilter IsNot Nothing Then
- Return _TextFilter.ToLower
- End If
- End Get
- Set(ByVal value As String)
- Mouse.OverrideCursor = System.Windows.Input.Cursors.AppStarting
-
- _TextFilter = value.ToLower
- RaisePropertyChanged()
- If value.Length >= 3 Then RefreshView()
- Mouse.OverrideCursor = System.Windows.Input.Cursors.Arrow
- Debug.WriteLine("")
- End Set
- End Property
In meinem Fall hat die ObservableColletion
InhaltGesamt
um die 5500 Items.AnzuzeigendeInterpreten
, -Alben
, -Musiktitel
, -Radiostreams
sind vom Typ ICollectionView
und werden in jeweils einer Listbox angezeigt.Also
InhaltGesamt
hat für jeden Eintrag eine Audiodatei, die dann auf die vier ICollectionViews sortiert werden:VB.NET-Quellcode
- Public Sub ErstelleDefault()
- _AnzuzeigendeInterpreten = CollectionViewSource.GetDefaultView(MainModule.InhaltGesamt.OrderBy(Function(o) o.Interpret).GroupBy(Function(f) f.Interpret).Select(Function(g) g.First()))
- _AnzuzeigendeAlben = CollectionViewSource.GetDefaultView(MainModule.InhaltGesamt.OrderBy(Function(o) o.Album).GroupBy(Function(f) f.Album).Select(Function(g) g.First()))
- _AnzuzeigendeMusiktitel = CollectionViewSource.GetDefaultView(MainModule.InhaltGesamt.OrderBy(Function(o) o.Musiktitel).GroupBy(Function(f) f.Dateiname).Select(Function(g) g.First()))
- _AnzuzeigendeRadiostreams = CollectionViewSource.GetDefaultView(MainModule.InhaltGesamt.OrderBy(Function(o) o.Album).GroupBy(Function(f) f.Album).Select(Function(g) g.First()))
- _AnzuzeigendeInterpreten.Filter = AddressOf AnzuzeigendeInterpreten_Filter
- _AnzuzeigendeAlben.Filter = AddressOf AnzuzeigendeAlben_Filter
- _AnzuzeigendeMusiktitel.Filter = AddressOf AnzuzeigendeMusiktitel_Filter
- _AnzuzeigendeRadiostreams.Filter = AddressOf AnzuzeigendeRadiostreams_Filter
- _AnzuzeigendeInterpreten.SortDescriptions.Add(New SortDescription(NameOf(ViewModel.MP3FileInfoVM.Interpret), ListSortDirection.Ascending))
- _AnzuzeigendeAlben.SortDescriptions.Add(New SortDescription(NameOf(ViewModel.MP3FileInfoVM.Album), ListSortDirection.Ascending))
- _AnzuzeigendeMusiktitel.SortDescriptions.Add(New SortDescription(NameOf(ViewModel.MP3FileInfoVM.Musiktitel), ListSortDirection.Ascending))
- _AnzuzeigendeRadiostreams.SortDescriptions.Add(New SortDescription(NameOf(ViewModel.MP3FileInfoVM.Album), ListSortDirection.Ascending))
- Testkommando = New RelayCommand(AddressOf TestkommandoAusführen)
- MarkierterInterpret = -1
- MarkiertesAlbum = -1
- MarkierterMusiktitel = -1
- MarkierterRadiostream = -1
- End Sub
Wenn ich die Suche nun zurücksetze, dann dauert es eine Ewigkeit, bis die Sub abgearbeitet ist, bzw. das Programm hängt sogar fest.
Hat jemand eine Idee, wie ich das performanter gestalten kann?