Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 优化用于标记DataGrid中多行的equal方法的性能_C#_.net_Wpf_Datagrid_Equals - Fatal编程技术网

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
构造函数的第二个参数。

是,is
O(logn)
而is
O(1)
也可以提供特定的是,is
O(logn)
而is
O(1)
也可以提供一个特定的Yes,is
O(logn)
而is
O(1)
也可以提供一个特定的Yes,is
O(logn)
而is
O(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);
        }
    }
}