0

我正在尝试制作一个小型应用程序,它在 List 中使用 List 类型的多个层次结构,有 20-30 个级别。我试过:

System.Collections.ComponentModel.ObservableCollection,但在运行时,我得到了一个OutOfMemoryException错误。然后,我尝试了List,这次我没有收到这样的错误。

哪种类型的集合占用的空间最少?或者,实现这种层次结构的好方法是什么?我只需要一个集合;我不需要更改通知等。我将 .NET 4 与 VB、Linq 和 WPF 一起使用。Parallel.ForEach我用线程实现了代码循环过程。

编辑:该程序用于将文件系统数据串入 Sql CE DB 并将其取回。因此,层次结构也可以是 20-30 级。

编辑:将有大约 80000 个带有 linq 的查询来获取层次结构。我使用的数据类型如下:

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
4

2 回答 2

2

如上所述,与每个集合相关的开销不会导致 OOM 异常,因为两者都实现了List<T>. ObservableCollection 可以与 INotifyCollectionChanged 结合使用,以提醒视图和演示者/视图模型对集合的更改。

更大的问题是,您使用的是哪种类型?如果内存不足,则每种类型都可能分配了不必要的内存量。此外,除非您打算使用绑定,否则我不会使用 ObservableCollection。

于 2012-08-03T20:44:21.320 回答
1

各种 .NET 集合类的性能特征差异很大,您要使用的集合类型也取决于您希望如何访问该集合。像往常一样,需要在性能(时间和内存)与简单性或便利性之间进行权衡。

也就是说,.NET 中最简单、性能最高的集合类型之一可能是Array

于 2012-08-03T20:46:30.167 回答