Vb.net 集合类型的内存消耗

Vb.net 集合类型的内存消耗,vb.net,memory,collections,Vb.net,Memory,Collections,我正在尝试制作一个小应用程序,在一个列表中使用20-30个级别的多层次类型列表。我试过: System.Collections.ComponentModel.ObservableCollection,但在运行时,我得到了一个OutOfMemoryException错误。然后,我尝试使用List,这次我没有遇到这样的错误 哪种类型的集合占用的空间最少?或者,实现这种层次结构的好方法是什么?我只需要收集;我不需要更改通知等。我将.NET4与VB、Linq和WPF一起使用。我用Parallel.For

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

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

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

编辑: 该程序用于将文件系统数据串入SQLCEDB并检索回来。因此,层次结构也可以是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

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


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

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


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

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


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

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


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

我认为,如果您对正在处理的“层次结构”进行更多的解释,可能会有所帮助。ObservableCollection和List都不是用来处理分层数据的。如果你不需要更改通知,不要使用ObservableCollection,因为更改通知是其存在的主要原因。@Wayne,我用更多的信息编辑了这个问题,谢谢你。我想如果你对“分层”多解释一些你在处理这件事可能会有帮助。ObservableCollection和List都不是用来处理分层数据的。如果您不需要更改通知,请不要使用ObservableCollection,因为更改通知是其存在的主要原因。@Wayne,我用更多信息编辑了问题谢谢。编辑了问题,数据类型是一种结构,我将其添加到问题中。是的,您是正确的,在深入研究该问题后,了解到OOM异常是列表类型无法保持并行线程速度的结果,它无法更新其src和其他索引。谢谢您的支持。编辑了这个问题,数据类型是一个结构,我将它添加到了问题中。是的,您是正确的,在深入研究这个问题后,了解到OOM异常是列表类型无法保持并行线程速度的结果,它无法更新其src和其他索引。感谢您的支持。数据类型是一种结构,我在问题中添加了它的详细信息。在性能方面,我主要可以使用什么样的集合类型来提高查询速度?哈希集可以提供最快的读取时间,但写入时会有开销。在您的信息帮助下,我测试了几种集合类型,如:System.collections.Concurrent.ConcurrentBag(of);System.Collections.Concurrent.ConcurrentQueue(Of);HashSet(T的);(T)名单;其中,ConcurrentQueue的工作速度最快,至少对于多线程应用程序是如此。感谢您的支持。数据类型是一种结构,我在问题中添加了它的详细信息。在性能方面,我主要可以使用什么样的集合类型来提高查询速度?哈希集可以提供最快的读取时间,但写入时会有开销。在您的信息帮助下,我测试了几种集合类型,如:System.collections.Concurrent.ConcurrentBag(of);System.Collections.Concurrent.ConcurrentQueue(Of);HashSet(T的);(T)名单;其中,ConcurrentQueue的工作速度最快,至少对于多线程应用程序是如此。谢谢你的支持。