0

リスト内のリストタイプの複数の階層を20〜30レベル使用する小さなアプリを作成しようとしています。私は試してみました:

System.Collections.ComponentModel.ObservableCollection、しかし実行時に、OutOfMemoryExceptionエラーが発生しました。次に、Listを試してみましたが、今回はそのようなエラーは発生しませんでした。

どのタイプのコレクションが最小のスペースを消費しますか?または、このタイプの階層を実現するための良い方法は何でしょうか?コレクションが必要です。変更通知などは必要ありません。VB、Linq、およびWPFで.NET4を使用しています。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
4

2 に答える 2

2

上記のように、両方がを実装しているため、各コレクションに関連付けられたオーバーヘッドによってOOM例外が発生することはありませんList<T>。ObservableCollectionをINotifyCollectionChangedと組み合わせて使用​​すると、コレクションへの変更についてビューおよびプレゼンター/ビューモデルにアラートを送信できます。

より大きな問題は、どのようなタイプを使用しているのかということです。メモリが不足している場合は、各タイプが不要な量のメモリを割り当てている可能性があります。また、バインディングを使用するつもりがない限り、ObservableCollectionは使用しません。

于 2012-08-03T20:44:21.320 に答える
1

さまざまな.NETコレクションクラスのパフォーマンス特性は大きく異なり、使用するコレクションのタイプは、コレクションへのアクセス方法によっても異なります。いつものように、パフォーマンス(時間とメモリ)と単純さまたは利便性の間にはトレードオフがあります。

とはいえ、.NETで最も単純でパフォーマンスの高いコレクションタイプの1つは、おそらく配列です。

于 2012-08-03T20:46:30.167 に答える