.Net 4.5 には、読み込みに時間がかかるオブジェクトを含むリストがあります。5000 個のオブジェクトのリストのロードには約 5 秒かかるため、各ループの実行にはかなりの時間がかかります。
オブジェクトの初期化には常に時間がかかるので、オブジェクトが必要なときに徐々にロードされるリストのタイプ、またはこのようなリストを作成する方法があるかどうか疑問に思っていました。
オブジェクトがいくつあるかを知っているリストのようなものですが、オブジェクトが取得されたときにインスタンス化するだけです。これは存在しますか?または、そのようなリストを作成することは可能ですか?
これを行う方法についてのアドバイスを探しています (実行可能な場合)。ボット C# または VB.Net コードで問題ありません。したがって、両方のタグを追加しました。
編集
遅延読み込みを試してみたことを付け加えておく必要がありますが、それはリストの読み込みを遅らせているように見えるだけで、実際には解決策ではありません。
編集
これが私が今使っているものです。遅延読み込みを使用しようとする不自由な試みを削除し、昨日行っていた方法に戻したことに注意してください (これは、Lazy
オブジェクトを使用しない実質的な遅延読み込みです) 。
Public Class SISOverlayItemList : Inherits SISBaseObject : Implements IEnumerable(Of SISOverlayItem)
Default Public ReadOnly Property Item(ByVal Index As Integer) As SISOverlayItem
Get
Return New SISOverlayItem(Me.List(Index).ID, Me.Parent)
End Get
End Property
Public ReadOnly Property Items As List(Of SISOverlayItem)
Get
Dim output As New List(Of SISOverlayItem)
Call Me.List.Items.AsParallel.ForAll(Sub(i) output.Add(New SISOverlayItem(i.ID, Me.Parent))
Return output
End Get
End Property
Public ReadOnly Property Parent As SISOverlay
Get
Return Me._Parent
End Get
End Property
Private ReadOnly Property List As SISList
Get
If Me._List Is Nothing Then
Me._List = Me.Application.Lists(Me.Name)
End If
Call Me.Refresh()
Return Me._List
End Get
End Property
Private _List As SISList
Private _Parent As SISOverlay
Public Sub New(ByVal Parent As SISOverlay)
Me._Parent = Parent
Me._Application = Parent.Application
Me._Name = String.Format("Overlay_{0}_Items", Parent.Name)
Call Me.Refresh()
End Sub
Public Sub Refresh()
Call Me.Application.Lists(Me.Name).ScanOverlay(Me.Parent)
End Sub
Public Function GetEnumerator() As IEnumerator(Of SISOverlayItem) Implements IEnumerable(Of SISOverlayItem).GetEnumerator
Return Me.Items.GetEnumerator()
End Function
Private Function GetEnumerator1() As IEnumerator Implements IEnumerable.GetEnumerator
Return Me.GetEnumerator
End Function
クラス終了
すべてのオブジェクトを現在のリスト ( ) の項目にItems
変換するプロパティは、非常に時間がかかっています。のインスタンス化に必要なパラメータがの各アイテムに格納されているオブジェクトへの API 呼び出しを必要とする場合、変換に常に時間がかかるのは何ですか。List
SISOverlayItem
ID
SISOverlayItem
Application
List
これらの呼び出しを小さなバッチで実行することが可能であれば、リスト内のすべてのオブジェクトをインスタンス化するために必要な長い遅延を取り除く必要があります。