.
Anmeldung | Registrieren | Hilfe |
Suchen
Home Foren News Member Offers Termine Developer Blogs Knowledge Base

Navigation

Navigationslinks überspringen.
Knowledge Base reduzierenKnowledge Base
Tutorials reduzierenTutorials
Webentwicklung
Cliententwicklung
Datenbankentwicklung
IT Professional
Sharepoint
Sprachspezifisch reduzierenSprachspezifisch
C#
Visual Basic
C++
XAML
SQL
JavaScript
Erfahrungsberichte reduzierenErfahrungsberichte
Entwicklersoftware
Bücher
FAQ Grundlagen

Verknüpfungen

  • Knowledge Base durchsuchen
  • Hilfe zur Knowledge Base
  • RSS Feed
  • Twitter

Laziness in C# 4.0

Laziness verhindert die Instanziierung eines Objektes bis zur Zeit in der es benötigt wird. Der Prozess der Objekterstellung ist immer Speicherintensiv. So eine verzögerte Instanziierung optimiert die Ressourcen. In C # 3.0, waren einige benutzerdefinierte Codierungen notwendig um "Lazy Instanziierung" zu implementieren. Mit C # 4.0 führt die Lazy <T> Klasse dies als Möglichkeit ein. In diesem Beitrag werden wir einen detaillierten Einblick in das Verhalten und die Funktionsweise dieser neuen Klasse bekommen.

Folgender Code zeigt Lazy Nutzung:
class Program
{
static void Main(string[] args)
{
Lazy<DummyObj> f = new Lazy<DummyObj>( );
Console.WriteLine("DummyObj is defined");
if (!f.IsValueCreated) Console.WriteLine("DummyObj is not initialized yet..");
Console.WriteLine("DummyObj::ID=" + (f.Value as DummyObj).ID);
if (f.IsValueCreated) Console.WriteLine("DummyObj is initialized now..");
Console.Read();

}
}

public class DummyObj
{
public int ID { get; set; }

public DummyObj()
{
Console.WriteLine("DummyObj:: Constructor is called");
ID = 1;
}
}

Die Ausgabe ist wie folgt:

DummyObj is defined
DummyObj is not initialized yet..
DummyObj:: Constructor is called
DummyObj::ID=1
DummyObj is initialized now..

Das Objekt DummyObj wird erst erstellt, wenn f.Value aufgerufen wird. Der Eigenschaftswert Value gibt die Instanz von dem Lazy initalisierten objekt zurück. Die Boolsche Eigenschaft IsValueCreated zeigt ob das Objekt initialisiert wurde oder nicht. Man kann über einen Delegate das Objekt DummyObj zurückgeben, wie das folgende beispiel zeigt:

Lazy<DummyObj> f = new Lazy<DummyObj>
(
()=>
{
DummyObj obj = new DummyObj() { ID = 99 };
return obj;
}
);

In diesem Fall wird die Ausgabe so aussehen:

DummyObj is defined
DummyObj is not initialized yet..
DummyObj:: Constructor is called
DummyObj::ID=99
DummyObj is initialized now..

Schlussbemerkung

Mit Lazy Initialisierung, wird der Speicher für ein Objekt nicht von anfang an gefüllt, bis es denn gebraucht wird. Lazy-Initialisierung kann die Leistung gleichmäßig über die Laufzeit eines Programms verbessern. Sie können die verzögerte Initialisierung für alle benutzerdefinierten Typen einsetzten, indem Sie den Typ in einem System.Lazy <(Of <(T>)>)-Klasse setzen.

von AndiM, 27.05.2010 zugeordnet zu C# .

Kommentare

Es sind noch keine Kommentare vorhanden.

Eigener Kommentar

Sie müssen angemeldet sein, um ein Kommentar zu erstellen.
  • Schwierigkeit: Einsteiger
  • Views: 714
  • Zur Druckversion
  • Artikel von AndiM

Kick it on dotnet-kicks.de

Artikel

Autor

Kick it!

Wenn ihnen dieser Artikel gefällt, bitte "kicken" sie ihn.

WPF Forum | ASP.NET Forum | ASP.NET MVC Forum | Silverlight Forum | Windows Phone 7 Forum | SharePoint Forum | Dotnet Jobs | Dotnet Termine | Developer Blogs | Dotnet News

Das Team | Regeln | Impressum