C# 优化用于标记DataGrid中多行的equal方法的性能
我有以下方法:C# 优化用于标记DataGrid中多行的equal方法的性能,c#,.net,wpf,datagrid,equals,C#,.net,Wpf,Datagrid,Equals,我有以下方法: private void SelectingCoreItems(SortedList<ICoreItem, ICoreItem> sortedList) { for (int i = 0; i < VisibleCoreItems.Count; i++) { CoreItem currentItem = VisibleCoreItems[i]; if (sortedList.ContainsKey(current
private void SelectingCoreItems(SortedList<ICoreItem, ICoreItem> sortedList)
{
for (int i = 0; i < VisibleCoreItems.Count; i++)
{
CoreItem currentItem = VisibleCoreItems[i];
if (sortedList.ContainsKey(currentItem))
{
itemListView.SelectedItems.Add(currentItem);
}
}
}
private void selection核心项目(分类列表分类列表)
{
对于(int i=0;i
我想标记所有相等的项目。这是可行的,但性能非常差,因为sortedList包含10000个项目,VisibleCoreItems包含200000多个项目
有没有办法优化该方法?您可以使用HashSet
而不是SortedList
:
private void selection核心项目(分类列表分类列表)
{
var lookup=newhashset(sortedList.Select(i=>i.Key));
对于(int i=0;i
此外,比较ICoreItem
接口的实例可能会比较慢(取决于实现)。如果它们包含的属性对于sortedList
中的元素是唯一的(例如,Id
),则可能值得将此属性用于查找
集合
编辑。如果sortedList
的元素没有合理的GetHashCode
和Equals
实现,您可能还需要指定IEqualityComparer
作为HashSet
构造函数的第二个参数。您可以使用HashSet
而不是sortedList
:
private void selection核心项目(分类列表分类列表)
{
var lookup=newhashset(sortedList.Select(i=>i.Key));
对于(int i=0;i
此外,比较ICoreItem
接口的实例可能会比较慢(取决于实现)。如果它们包含的属性对于sortedList
中的元素是唯一的(例如,Id
),则可能值得将此属性用于查找
集合
编辑。如果sortedList
的元素没有合理的GetHashCode
和Equals
实现,您可能还需要指定IEqualityComparer
作为HashSet
构造函数的第二个参数。您可以使用HashSet
而不是sortedList
:
private void selection核心项目(分类列表分类列表)
{
var lookup=newhashset(sortedList.Select(i=>i.Key));
对于(int i=0;i
此外,比较ICoreItem
接口的实例可能会比较慢(取决于实现)。如果它们包含的属性对于sortedList
中的元素是唯一的(例如,Id
),则可能值得将此属性用于查找
集合
编辑。如果sortedList
的元素没有合理的GetHashCode
和Equals
实现,您可能还需要指定IEqualityComparer
作为HashSet
构造函数的第二个参数。您可以使用HashSet
而不是sortedList
:
private void selection核心项目(分类列表分类列表)
{
var lookup=newhashset(sortedList.Select(i=>i.Key));
对于(int i=0;i
此外,比较ICoreItem
接口的实例可能会比较慢(取决于实现)。如果它们包含的属性对于sortedList
中的元素是唯一的(例如,Id
),则可能值得将此属性用于查找
集合
编辑。如果
sortedList
的元素没有合理的GetHashCode
和Equals
实现,您可能还需要指定IEqualityComparer
作为HashSet
构造函数的第二个参数。是,isO(logn)
而isO(1)
也可以提供特定的是,isO(logn)
而isO(1)
也可以提供一个特定的Yes,isO(logn)
而isO(1)
也可以提供一个特定的Yes,isO(logn)
而isO(1)
,也许提供一个特定的侧重点:考虑阅读MSDN上的每一个基本知识,因为每个集合类型的描述都包括“性能考虑”部分。这将让您为许多情况选择最合适的集合。SortedList
基本上从来都不是任何情况下的正确集合。总有更好的收藏可供使用。只是假装它不存在,你的生活会更容易。边注:考虑阅读MSDN上的每一个基础,因为每个集合类型的描述包括“性能考虑”一节。这将让您为许多情况选择最合适的集合。SortedList
基本上从来都不是任何情况下的正确集合。总有更好的收藏可供使用。只是假装它不存在,你的生活会更容易。边注:考虑关于MSDN的每一个基本的阅读,因为每个集合类型的描述包括“性能考虑”。
private void SelectingCoreItems(SortedList<ICoreItem, ICoreItem> sortedList)
{
var lookup = new HashSet<ICoreItem>(sortedList.Select(i => i.Key));
for (int i = 0; i < VisibleCoreItems.Count; i++)
{
CoreItem currentItem = VisibleCoreItems[i];
if (lookup.Contains(currentItem))
{
itemListView.SelectedItems.Add(currentItem);
}
}
}