我正在尝试制作一个小应用程序,它在List中使用List类型的多层次结构,大约20-30级别。我尝试过:
System.Collections.ComponentModel.ObservableCollection
,但在运行时,我收到OutOfMemoryException
错误。然后,我尝试使用List,这次我没有遇到这样的错误。
哪种类型的系列占用的空间最少?或者,什么是实现这种类型的层次结构的好方法?我只需要一个集合;我不需要更改通知等。我使用.NET 4与VB,Linq和WPF。我用Parallel.ForEach
线程实现了代码循环过程。
编辑: 该程序用于将文件系统数据串入Sql CE DB并将其检索回来。因此,层次结构也可以是20-30级。
编辑:使用linq将有大约80000个查询来获取层次结构。我使用的数据类型如下:
Public Structure FileRecord
Property ID As String
Property Namee As String
Property Size As String
Property IsFolder As Boolean
Property DateModified As Date
Property FullPath As String
Property Disk As String
Property ParentID As String
Property Items As List(Of FileRecord)
End Structure
答案 0 :(得分:2)
与每个集合相关联的开销不会导致OOM异常,如上所述,因为它们都实现了List<T>
。 ObservableCollection可以与INotifyCollectionChanged一起使用,以警告视图和演示者/视图模型对集合的更改。
更大的问题是,您使用的是哪种类型?如果内存不足,每种类型可能会分配不必要的内存量。另外,除非你打算使用绑定,否则我不会使用ObservableCollection。
答案 1 :(得分:1)
各种.NET集合类的性能特征差异很大,您要使用的集合类型也取决于您希望如何访问集合。像往常一样,在性能(时间和内存)与简单性或便利性之间需要进行权衡。
也就是说,.NET中最简单,最高性能的集合类型之一可能是Array。