方法: オブジェクトの遅延初期化を実行する
System.Lazy<T> クラスは、オブジェクトの遅延初期化とインスタンス化を実行する操作を簡略化します。 オブジェクトを限定的に初期化すれば、不要なオブジェクトを作成する必要がなくなります。また、オブジェクトに初めてアクセスするときまで、そのオブジェクトの初期化を延期できます。 詳細については、「限定的な初期化」を参照してください。
例 1
次の例では、Lazy<T> で値を初期化する方法を示します。 someCondition
変数を true または false に設定する他の一部のコードでは、遅延変数は必要ないものとします。
Dim someCondition As Boolean = False
Sub Main()
'Initializing a value with a big computation, computed in parallel
Dim _data As Lazy(Of Integer) = New Lazy(Of Integer)(Function()
Dim result =
ParallelEnumerable.Range(0, 1000).
Aggregate(Function(x, y)
Return x + y
End Function)
Return result
End Function)
' do work that may or may not set someCondition to True
' ...
' Initialize the data only if needed
If someCondition = True Then
If (_data.Value > 100) Then
Console.WriteLine("Good data")
End If
End If
End Sub
static bool someCondition = false;
//Initializing a value with a big computation, computed in parallel
Lazy<int> _data = new Lazy<int>(delegate
{
return ParallelEnumerable.Range(0, 1000).
Select(i => Compute(i)).Aggregate((x,y) => x + y);
}, LazyThreadSafetyMode.ExecutionAndPublication);
// Do some work that may or may not set someCondition to true.
// ...
// Initialize the data only if necessary
if (someCondition)
{
if (_data.Value > 100)
{
Console.WriteLine("Good data");
}
}
例 2
次の例では、System.Threading.ThreadLocal<T> クラスを使用して、現在のスレッド上の現在のオブジェクト インスタンスでのみ表示される型を初期化する方法を示します。
//Initializing a value per thread, per instance
ThreadLocal<int[][]> _scratchArrays =
new ThreadLocal<int[][]>(InitializeArrays);
// . . .
static int[][] InitializeArrays () {return new int[][]}
// . . .
// use the thread-local data
int i = 8;
int [] tempArr = _scratchArrays.Value[i];
'Initializing a value per thread, per instance
Dim _scratchArrays =
New ThreadLocal(Of Integer()())(Function() InitializeArrays())
' use the thread-local data
Dim tempArr As Integer() = _scratchArrays.Value(i)
' ...
End Sub
Function InitializeArrays() As Integer()()
Dim result(10)() As Integer
' Initialize the arrays on the current thread.
' ...
Return result
End Function
関連項目
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET