Nasıl yapılır: Nesnelerin Yavaş Başlatılmasını Gerçekleştirme
sınıfı, System.Lazy<T> yavaş başlatma ve nesnelerin örneğini oluşturma işlemlerini gerçekleştirme işini basitleştirir. Nesneleri gecikmeli bir şekilde başlatarak, hiç ihtiyaç duyulmazsa bunları oluşturmak zorunda kalmayabilirsiniz veya ilk erişilene kadar başlatmalarını erteleyebilirsiniz. Daha fazla bilgi için bkz . Gecikmeli Başlatma.
Örnek 1
Aşağıdaki örnekte ile Lazy<T>bir değerin nasıl başlatılmış olduğu gösterilmektedir. Değişkeni true veya false olarak ayarlayan başka bir koda bağlı olarak gecikmeli değişkenin someCondition
gerekli olmayabileceğini varsayalım.
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");
}
}
Örnek 2
Aşağıdaki örnekte, sınıfın yalnızca geçerli iş parçacığındaki System.Threading.ThreadLocal<T> geçerli nesne örneğine görünür bir tür başlatmak için nasıl kullanılacağı gösterilmektedir.
//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
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin