Megosztás a következőn keresztül:


Ú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