مشاركة عبر


كيفية القيام بما يلي: قم بإجراء تهيئة البطيئة للكائنات

System.Lazy<T>فئة بتسهيل العمل لإجراء التهيئة البطيئة و إنشاء مثيل من الكائنات. بتهيئة الكائنات بطريقة البطيئة، يمكنك تجنب الحاجة إلى إنشاء لهم على الإطلاق في حالة عدم الحاجة أو يمكن تأجيل تهيئة الخاصة بهم حتى يتم الوصول إليها أولاً. لمزيد من المعلومات، راجع تهيئة البطيئة.

مثال

يوضح المثال التالي كيفية إلى يهيّئ القيمة Lazy<T>. افترض بأن المتغير البطيئة قد لا تكون مفيدة، اعتماداً تشغيل بعض تعليمات برمجية الأخرى تعيين 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);
  }, LazyExecutionMode.EnsureSingleThreadSafeExecution);

  // 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");
      }
}

يظهر المثال التالي كيفية استخدام System.Threading.ThreadLocal<T>فئة نوع اليهيّئ الذي هو vهوible فقط لمثيل الكائن الحالي تشغيل مؤشر ترابط الحالي.

    '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
//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];

راجع أيضًا:

المرجع

System.Threading.LazyInitializer

موارد أخرى

تهيئة البطيئة