c#性能:使用构造函数或循环用现有项构造新的集合
本文关键字:集合 循环 性能 构造函数 | 更新日期: 2023-09-27 17:52:11
我已经搜索了但没有找到答案,可能是因为这个问题不容易描述。例如,在WPF中,我有一个模型Test
和一个List<Test> lst
,然后必须构建一个ObservableCollection<TestViewModel> ObsTests
。可能有两种方法:
-
var ObsTests = new ObservableCollection<TestViewModel>(lst .Select(t = > new TestViewModel(t));
-
var ObsTests = new ObservableCollection<TestViewModel>(); foreach(var test in lst) { ObsTests.Add(new TestViewModel(test)); }
请告诉我哪个性能更好,并告诉我最好的解决方案,如果AsParallel
是可用的(如是ObservableCollection threadsafe?我使用。net 4.5)
没有区别。Ctor从基类Collection
使用Add
方法:裁判:点击!
public ObservableCollection(List<T> list)
: base((list != null) ? new List<T>(list.Count) : list)
{
CopyFrom(list);
}
private void CopyFrom(IEnumerable<T> collection)
{
IList<T> items = Items;
if (collection != null && items != null)
{
using (IEnumerator<T> enumerator = collection.GetEnumerator())
{
while (enumerator.MoveNext())
{
items.Add(enumerator.Current);
}
}
}
}
ObservableCollection
基于Collection
,所以它不是线程安全的。对于线程安全的收集-使用Concurrent
命名空间中的一些类。更多关于MSDN。
你也可以实现自己的超快可观察对象集合。像在这里:点击!
如果您有一些操作的标准实现,并且可以使用您的代码完成相同的操作,那么最好选择标准实现。而且它看起来更小了:)