Útmutató: Objektumok lusta inicializálásának végrehajtása
Az System.Lazy<T> osztály leegyszerűsíti az objektumok lusta inicializálásának és példányosításának munkáját. Az objektumok lusta inicializálásával elkerülheti, hogy egyáltalán létre kell hoznia őket, ha nincs rájuk szükség, vagy elhalaszthatja az inicializálásukat, amíg el nem éri őket. További információ: Lusta inicializálás.
1. példa
Az alábbi példa bemutatja, hogyan inicializálhat egy értéket a következővel Lazy<T>: . Tegyük fel, hogy a lusta változóra nincs szükség, attól függően, hogy a változót igaz vagy hamis értékre állítja.someCondition >
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. példa
Az alábbi példa bemutatja, hogyan inicializálhat egy olyan típust az System.Threading.ThreadLocal<T> osztály használatával, amely csak az aktuális szál aktuális objektumpéldánya számára látható.
//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
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: