World of Web

Tutorials

Foreach vs. ToList()

by on Okt.05, 2010, under Kurztutorials

Problematik

Problem: Ein Array soll zu einer Liste werden.

Lösungen:

  1. Foreach
  2. ToList()-Extension

Der Vergleich der beiden Varianten:

Vergleich Foreach vs ToList - Hohe Werte

Foreach vs. ToList - Hohe Werte

Foreach vs. ToList - niedrige Werte

Foreach vs. ToList - niedrige Werte

x-Achse: Anzahl der Elemente

y-Achse: Zeit in ms

Codebeispiel

Der Code mit dem die Statistik erstellt wurde:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
List<TimeSpan> timeForeach = new List<TimeSpan>();
List<TimeSpan> timeToList = new List<TimeSpan>();
List<string> collection = new List<string>();
for (int j = 100; j < 20000000; j*=2)
{
   Guid[] guidList = new Guid[j];
   DateTime start = DateTime.Now;
   for (int i = 0; i < guidList.Length; i++)
   {
      guidList[i] = Guid.NewGuid();
   }
   DateTime end = DateTime.Now;
   TimeSpan diffGen = end - start;
   List<Guid> guidListForeach = new List<Guid>();
   start = DateTime.Now;
   foreach (Guid g in guidList)
   {
      guidListForeach.Add(g);
   }
   end = DateTime.Now;
   TimeSpan diffForeach = end - start;
   timeForeach.Add(diffForeach);
   List<Guid> guidListToList = new List<Guid>();
   start = DateTime.Now;
   guidListToList = guidList.ToList<Guid>();
   end = DateTime.Now;
   TimeSpan diffToList = end - start;
   timeToList.Add(diffToList);
}
Console.WriteLine("Average Foreach \t {0} ms", timeForeach.Average(=> s.TotalMilliseconds));
Console.WriteLine("Average ToList \t {0} ms", timeToList.Average(=> s.TotalMilliseconds));

Fazit

Bei einer hohen Anzahl von Werten in einem Array ist die ToList-Extension schneller als die Foreach-Variante. Bei wenigen Werten ist die Foreach-Lösung performanter.

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Post to Twitter Post to Plurk Post to Yahoo Buzz Post to Delicious Post to Digg Post to Facebook Post to MySpace Post to Ping.fm Post to Reddit Post to StumbleUpon

2 Comments more...

Speichern und Laden der Expansion-States eines TreeViews

by on Okt.05, 2010, under Kurztutorials

Da uns das Standard Tree-View Control der WinForms keine Methode zur Verfügung stellt, die Expansion-States zu speichern und später wieder zu laden, wird in diesem Tutorial eine recht einfache Variante erarbeitet, welche genau zu diesem Ziel führen wird.

Grund-Überlegung

Die Baumknoten, die expandiert sind, werden in eine Liste hinzugefügt und beim Laden wird dann überprüft, ob sich der momentane Knoten in der Liste befindet oder nicht.

Deklaration der Liste

1
private List<TreeNode> expandedNodeList = new List<TreeNode>();

Es wird eine leere Liste aus TreeNodes erstellt, mit der dann später gearbeitet werden kann.

Speicher-Funktion

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void saveExpandStates(TreeNode tn)
{
   if (tn.IsExpanded)
   {
      expandedNodeList.Add(tn);
      if (tn.Nodes.Count > 0)
      {
         foreach (TreeNode t in tn.Nodes)
            saveExpandStates(t);
      }
      else
         return;
   }
   else
      return;
}
Leave a Comment more...

Tages differenz berechnen

by on Okt.01, 2010, under Kurztutorials

Nehmen wir an, wir müssten aus den Zwei Daten 20081212 und 20090224 die Differenz der Tage bilden.

20081212 repräsentiert hierbei den 12.12.2008 und 20090224 den 24.02.2009.

Funktion zum splitten des Datums

Zunächst einmal brauchen wir Funktionen, die uns aus den gegebenen Integer-Variablen das Jahr, den Monat und die Tage „filtert“.

Meine Version dieser Funktionen sieht so aus:

public static int getYear(int date)
{
   int year = date / 10000;
   return year;
}
 
public static int getMonth(int date)
{
   string sDate = Convert.ToString(date);
   sDate = sDate.Substring(4, 2);
   int iDate = Convert.ToInt32(sDate);
   return iDate;
}
 
public static int getDay(int date)
{
   string sDate = Convert.ToString(date);
   sDate = sDate.Substring(6, 2);
   int iDate = Convert.ToInt32(sDate);
   return iDate;
}

Das Jahr wird berechnet, indem man die Zahl einfach durch 10.000 teilt. Da beim Variablen-Typ Integer immer eine Ganzzahldivision ausgeführt wird, werden die Dezimalstellen einfach weggestrichen.

Bei der Monat und Tage Berechnung funktioniert dieser Trick leider nicht.

1 Comment more...

Objekt Serialisierung/Deserialisierung

by on Okt.01, 2010, under Datenhaltung

Ziel

Das Ziel in diesem Tutorial ist ein Objekt mithilfe des .NET-Frameworks zu serialisieren bzw. deserialisieren damit es später wiederverwendet werden kann. Das Objekt wird nach der serialisierung als XML Datei gespeichert.

Voraussetzungen

Voraussetzungen für das Tutorial sind zumindest Anfänger bis Fortgeschrittene Kenntnisse in C#. Zum einfacheren Verständnis wird empfohlen das im Tutorial erarbeitete Szenario selbst nach zu programmieren. Hierzu wird das Microsoft Visual Studio empfohlen (ab Version 2005).

Szenario

Für einen kleinen Chat (siehe andere Tutorials) sollen die Benutzer inkl. Passwort und einiger anderer Informationen in einer XML Datei gespeichert werden und durch Objekt serialisierung in einer Objekt-Struktur zurückgegeben werden.

1 Comment more...

Chat Teil 2: Server-Applikation

by on Okt.01, 2010, under .NET Remoting

Chat Server mit .NET Remoting
Part2: Server Applikation

Vorwort

Dies ist der zweite Teil des Tutorials „Wie erstelle ich einen Chat mithilfe von .NET-Remoting“.

Implementierung des Interfaces IServer

Bevor wir an den Grund-Kern des Servers gehen können, müssen wir im ersten Schritt erstmal eine Klasse erstellen, die das Interface „IServer“ implementiert.

Es empfiehlt sich, die Einzelnen Komponenten einer „Solution“ in verschiedenen Projekt-Mappen zu halten.

Für den Server reicht eine einfache Konsolen-Anwendung, da nichtweiter Verwaltet werden muss. Die Einstellungen, z.B. Port und Adresse des Servers können einfach in eine Konfigurationsdatei gespeichert werden. In unserem Beispiel werden die Werte fest Übergeben.

Leave a Comment more...

Chat Teil 1: Vorwort und Interfaces

by on Sep.30, 2010, under .NET Remoting

Chat Server mit .NET Remoting
Part1: Vorwort und Kommunikations Interfaces

Vorwort

Dies ist der erste Teil des Tutorials „Wie erstelle ich einen Chat-Server mithilfe von .NET-Remoting“.

Zunächst einmal, was ist .NET Remoting?

.NET Remoting

.NET Remoting ist ein sehr einfach zu habendes Framework zur Kommunikation zwischen Objekten die Physikalisch voneinander getrennt verlaufen (andere Prozesse, andere Computer, etc.).

Mit .NET Remoting lässt sich ohne TCP-Sockets zu verwenden recht einfach eine Client-Server Kommunikation aufbauen.

Die Kommunikation zwischen diesen erfolgt durch sogenannte „Channels“. Diese Transportieren Nachrichten von einem Objekt zum anderen.

Leave a Comment more...