C# 可观察的集合还是可数的?

C# 可观察的集合还是可数的?,c#,wpf,.net-4.0,C#,Wpf,.net 4.0,加载列表框,哪个更快 我目前正在使用IEnumerable作为列表框的ItemSource 如果我将其更改为ObservaleCollection(如果可能的话),会对性能产生任何影响吗?这实际上取决于实现IEnumerable的类。IEnumerable只是一个接口,任何数量的类都可能在实际实现后面。您并没有真正绑定IEnumerable,因为它是一个接口,但您绑定的是实现IEnumerable的一些集合/列表。ObservableCollection还实现了IEnumerable,因此应该能

加载列表框,哪个更快

我目前正在使用IEnumerable作为列表框的ItemSource


如果我将其更改为ObservaleCollection(如果可能的话),会对性能产生任何影响吗?

这实际上取决于实现IEnumerable的类。IEnumerable只是一个接口,任何数量的类都可能在实际实现后面。您并没有真正绑定IEnumerable,因为它是一个接口,但您绑定的是实现IEnumerable的一些集合/列表。ObservableCollection还实现了IEnumerable,因此应该能够安全地将其用作ItemSource

通过IEnumerable枚举以填充列表框永远不会成为应用程序的性能瓶颈,除非您使用的自定义类在遍历值时执行大量逻辑,在这种情况下,您的设计可能有缺陷


尽管如此,最好的方法当然是简单地测量。没有什么可以替代测量和做出假设,这些假设很可能会在以后再次困扰你。

这实际上取决于哪个类正在实现IEnumerable。IEnumerable只是一个接口,任何数量的类都可能在实际实现后面。您并没有真正绑定IEnumerable,因为它是一个接口,但您绑定的是实现IEnumerable的一些集合/列表。ObservableCollection还实现了IEnumerable,因此应该能够安全地将其用作ItemSource

通过IEnumerable枚举以填充列表框永远不会成为应用程序的性能瓶颈,除非您使用的自定义类在遍历值时执行大量逻辑,在这种情况下,您的设计可能有缺陷

尽管如此,最好的方法当然是简单地测量。没有什么可以替代测量和做出假设,而这些假设很可能会在以后再次困扰你。

我对WPF和C#很陌生,但到目前为止,我的理解是,如果你使用IEnumerable作为ItemSource,例如列表,你将无法看到该列表中的更改,除非你将其替换为另一个:

IEnumerable<int> myList = new List<int>();
myList.Add(3);
将通知您的GUI

如果使用ObservableCollection,则即使使用
add
方法添加新元素,GUI也会收到通知。因此,您必须决定是否要将元素添加到列表框中。

我对WPF和C#很陌生,但到目前为止,我的理解是,如果您使用IEnumerable作为ItemSource,例如列表,您将无法看到该列表中的更改,除非您将其替换为其他列表:

IEnumerable<int> myList = new List<int>();
myList.Add(3);
将通知您的GUI


如果使用ObservableCollection,则即使使用
add
方法添加新元素,GUI也会收到通知。因此,您必须决定是否要将元素添加到列表框。

如果您绑定到实现
IEnumerable
的集合,并且该集合不是
可观察集合,例如
列表
,则绑定目标将不会收到添加/删除项目的通知

只有在集合中的项数不变的情况下,不使用ObservableCollection才有意义。只有这样,将ObservableCollection与其他对象进行比较才有意义。如果项目的数量发生变化,那么您除了使用ObservableCollection之外别无选择

此外,正如其他用户已经指出的,您不必将ObservableCollection与IEnumerable进行比较,而是与实现IEnumerable的类进行比较


例如,可以在堆栈溢出问题中找到比较ObservableCollection-List。

如果绑定到实现了
IEnumerable
的集合,并且该集合不是
ObservableCollection
,例如
List
,则绑定目标将不会收到添加/删除项的通知

只有在集合中的项数不变的情况下,不使用ObservableCollection才有意义。只有这样,将ObservableCollection与其他对象进行比较才有意义。如果项目的数量发生变化,那么您除了使用ObservableCollection之外别无选择

此外,正如其他用户已经指出的,您不必将ObservableCollection与IEnumerable进行比较,而是与实现IEnumerable的类进行比较


例如,可以在Stack Overflow question(堆栈溢出问题)中找到比较ObservableCollection-List。

实施并测试两种解决方案的性能,以找出哪一种更适合您的场景。如果您真的想深入了解这些信息,请通过性能分析器运行代码。ObservableCollection是一个IEnumerable。你不能告诉任何关于接口速度的事情。IEnumerable是一个迭代器。ObservableCollection是一个具体的集合,它公开了一个符合IEnumerable接口的迭代器。因此,您可能需要比较两种不同的集合类型。实施并测试这两种解决方案的性能,以找出哪种更适合您的场景。如果您真的想深入了解这些信息,请通过性能分析器运行代码。ObservableCollection是一个IEnumerable。你不能告诉任何关于接口速度的事情。IEnumerable是一个迭代器。ObservableCollection是一个具体的集合,它公开了一个符合IEnumerable接口的迭代器。因此,您可能需要比较两种不同的集合类型。。