Die Community zu .NET und Classic VB.
Menü

Visual Studio 2012 und .NET 4.5

 von 

Einleitung 

Visual Studio 2012 ist da. Doch warum sollen wir schon wieder eine neue Entwicklungsumgebung einsetzen?

Unser langjähriger und sehr geschätzter ActiveVB-MVP Rene Niediek äußert in dieser Kolumne seine Meinung zu den Neuerungen von Visual Studio 2012 und dem .NET-Framework 4.5. Rene ist Freiberufler und arbeitet daher sehr intensiv mit Visual Studio 2010, hauptsächlich mit WPF/Silverlight unter C#. Aus diesem Grund sind Verbesserungen an der Entwicklungsumgebung für ihn ein wichtiger Aspekt, um produktiv arbeiten zu können. ActiveVB dankt für die Unterstützung, von einem langjährigen Experten eine Einschätzung über die Vor- und Nachteile der neuen Entwicklungsumgebung zu erhalten.

Diese Kolumne wurde auf Basis einer Diskussion im VB.NET-Forum erstellt.

Visual Studio 2012  


Abbildung 1: Das neue Logo von Visual Studio 2012 (Bild: Microsoft)

Was mir bisher am Besten gefällt ist ein Keinigkeit, die das Arbeiten aber deutlich flüssiger werden lässt. Das Laden von großen Solutions (mehr als 25 Projekte) und Projekten (mehr als 100 Codefiles) geht deutlich schneller und vor allem das Rendern von XAML-Dateien im Designer blockiert die IDE nicht mehr. Man kann also sofort weiterarbeiten oder wieder zu einer anderen Datei wechseln, obwohl der Designer noch nicht fertig gerendert hat. Das Darstellen von XAML-Code ist wesentlich weniger aufwändiger als das Rendern des UI im Designer.

Es sind zwar eine einige Features aus den Visual Studio Productivity Power Tools 2010, wie der Solution Navigator, der es erlaubt Dateien zu öffnen und direkt zu Membern zu springen, ins Release von 2012 integriert worden. Eines meiner Lieblingsfeatures hat es aber leider nur unvollständig ins Release geschafft: Die DocumentWell, die es zulässt, dass die DocumentTabs auf der linken Seite erscheinen. Das wird dann wohl in den Produktivity Power Tools 2012 wieder enthalten sein, hoffe ich zumindest. Die Suchdialoge sind nun deutlich schlanker ausgefallen und docken sich automatisch in der rechten oberen Ecke des Dokumentenfensters an, es werden alle Matches im aktuellen Dokument farblich hinterlegt. Vorteil: Finden statt Suchen.

Ebenso ist der Editor für XAML dem von Expression Blend nun deutlich ähnlicher und sehr viel mächtiger als noch unter VS2010. Das gilt sowohl für Silverlight als auch für WPF.

Leider wird Visual Studio erst mit einigen Zusatztools richtig benutzbar, das hat sich auch mit Visual Studio 2012 leider nicht geändert. Ich nutze z.B. Resharper, der mir einige Funktionen zur Verfügung stellt, die ich intensiv in meinen Arbeitsprozess integriert habe. Das sind beispielsweise Funktionen wie die Klammervervollständigung, Refactoring oder das Wechseln zwischen impliziter und expliziter Variablendeklaration. Als zweites Tool setze ich VSCommands ein, das Informationen im Output-Fenster farblich strukturiert, gute Such- und Markier-Funktionen hat und drittens natürlich die kostenfreien Productivity Power Tools. Nicht in jedem Tool nutze ich alle Features, einige sind in den Tools auch doppelt vorhanden, aber diese lassen sich im jeweiligen Tool auch deaktivieren.

Oberfläche

Visual Studio 2012 unterstützt nun zwei unterschiedliche Farbdarstellungen. Standardmäßig ist eine etwas langweilige, helle Oberfläche mit einfarbigen Icons aktiviert. Das Farbschema kann über den Optionen-Dialog im Register Umgebung / Allgemein, der über den Menüpunkt Tools / Optionen zu erreichen ist, auf "Dunkel" umgestellt werden. Danach findet der Benutzer eine anthrazite Oberfläche vor, in der die Icons farbiger wirken. Dies gilt allerdings nur für das Hauptarbeitsfenster und die Tools, die sich in diesem andocken lassen. Alle anderen Dialoge bleiben im Windows-Standard-Layout. Insgesamt hat man wohl an der ein oder anderen Stelle einige Pixel für Rahmen und Trennlinien eingespart, sodass mehr Fläche für Informationen zur Verfügung steht, die bislang auch auf zwei Bildschirmen stets knapp bemessen war.

Die Einträge des Hauptmenüs sind erstaunlicherweise vollständig in großen Buchstaben dargestellt, die Einträge der Submenüs allerdings nicht. Es gibt die Möglichkeit in der Windows-Registry das Erscheinungsbild in die altbekannte Darstellungsform zu ändern:

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\General\SuppressUppercaseConversion 
REG_DWORD value: 1

Listing 1: Anpassung des Registrierungsschlüssels

Wer über Visual Studio 2012 mehr wissen möchte, findet in der MSDN von Microsoft weitere Informationen.

Spracherweiterungen  

Async und Await

Die Erweiterungen der Sprachen sind eher gering ausgefallen. Bei C# sind es die Schlüsselwörter Async und Await, die das Anwenden von asynchronen Methoden erleichtern und den Code lesbarer machen sollen. Ich bin mir da aber noch nicht sicher, ob ich das klassische Pattern mit Callbacks nicht doch besser finde.

Das folgende, angepasste Beispiel (WPF) aus der MSDN-Hilfe veranschaulicht die Verwendung von Async und Await:

Class MainWindow
    Private Async Sub Button1_Click(sender As Object, e As RoutedEventArgs)
        ' Aufruf der asynchronen Methode blockiert das UI nicht.
        Dim result As String = Await DoSomeThingTimeConsumingAsync()

        ' Ergebnis anzeigen.
        TextBox1.Text &= result
    End Sub
    
    Private Async Sub Button2_Click(sender As Object, e As RoutedEventArgs)
        ' Aufruf der synchronen Methode blockiert das UI trotz des Async Schlüsselwortes,
        ' da innerhalb der DoSomeThingTimeConsuming()-Methode nicht mit Await auf den Task gewartet wird.
        Dim result As String = Await DoSomeThingTimeConsuming()
        
        ' Ergebnis anzeigen.
        TextBox1.Text &= result
    End Sub                                
    
    ' Die folgende Methode wird asynchron ausgeführt. Der UI-Thread
    ' wird nicht blockiert. Es können weitere Eingaben gemacht werden.
    Public Async Function DoSomeThingTimeConsumingAsync() As Task(Of String)
        Await Task.Delay(10000)
        Return "Async fertig"
    End Function
    
    ' Diese Methode blockiert die UI, da hier das Await-Schlüsselwort nicht verwendet wurde.
    Public Async Function DoSomeThingTimeConsuming() As Task(Of String)
        Thread.Sleep(10000)
        Return "leider war die UI eingefroren"
    End Function
End Class

Listing 2: VB.NET-Beispiel für Async und Await

<Window x:Class="MainWindow" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"; 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Title="MainWindow" 
        Height="150" 
        Width="300">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Button Content="Button" Grid.Row ="0" Click="Button1_Click"/>
        <Button Content="Button" Grid.Row ="1" Click="Button2_Click"/>
        <TextBox x:Name="TextBox1" Grid.Row ="2"/>
    </Grid>
</Window>

Listing 3: Zugehöriger XAML-Code

Quelle des Orginalcodes aus der MSDN

Weiterführende Informationen zu Async und Await finden sich in der MSDN.

Yield-Schlüsselwort

Bei VB gibt es nun zusätzlich das Yield-Schlüsselwort, das in C# schon länger existiert und das Erstellen von IteratorBlöcken ermöglicht.
Nachfolgend ein Beispiel, der die Funktionalität des neuen Schlüsselworts verdeutlicht:

' Folgenden Code als Modul anlegen:

Module Module1
    
    Sub Main()
        For Each n As Integer In GetSomeNumbers()
            Console.WriteLine(n)
        Next
    End Sub
    
    Public Iterator Function GetSomeNumbers() As IEnumerable(Of Integer)
        Yield 1
        Yield 2
        Yield 4
        Yield 8
        Yield 16
    End Function
    
End Module

Listing 4: Beispiel für das Yield-Schlüsselwort

.NET-Framework 4.5  

Visual Studio 2012 und .NET 4.5 sind jetzt nicht die ganz großen Würfe, die eine ganze Flut von Veränderungen einführen. Es ist eben ein Minor Release, was ja auch der kleine Schritt in der Versionsnummer des Frameworks klar macht.

Es sind nicht die neuen Features die einen Umstieg rechtfertigen, sondern die vielen kleinen Verbesserungen im Detail. Zum Teil sind diese Verbesserungen aber dringend notwendig gewesen: Zum Beispiel sind einige schwerwiegende Fehler bei WPF-Controls ausgemerzt worden, die einerseits zu MemoryLeaks führen konnten und andererseits die Performance der UI massiv beeinflusst haben. Auch das Konzept der Virtualisierung von datengebundenen Controls in WPF ist noch einmal intensiv überarbeitet worden. Nun lassen sich endlich Treeviews mit einigen zehntausend Knoten in diversen Levels erstellen, ohne dass Rechner mit wenig Rechenleistung überlastet sind, weil ein eigentlich nicht sichtbarer (collapsed) Zweig eben intern trotzdem gerendert wurde. Gleiches gilt für das Grouping innerhalb von DataGrids. Das ist in .NET 4.0 eigentlich nicht verwendbar, da schon die Zuweisung eines GroupingTemplates die Virtualisierung vollständig verhinderte. Das führt dazu, das 20.000 Datensätze in einem DataGrid tatsächlich gerendert wurden, was auf einem Lenovo mit Intel-i7-CPU und 16GB RAM 15 Minuten brauchte und dabei über 7GB Arbeitsspeicher belegte, bevor die Anwendung wieder reagierte. Das sind natürlich sehr schwerwiegende Fehler.

Wirklich neu, aber eben auch nur auf Windows 8 verfügbar, sind WinRT-Applikationen. Allerdings hatte ich leider noch keine Gelegenheit, das auszuprobieren, daher enthalte ich mich diesbezüglich mit einer Einschätzung.

Fazit  

Insgesamt sind die Änderungen, die Visual Studio 2012 und .NET 4.5 einführen, sinnvoll. Natürlich ist auch weiterhin Verbesserungsbedarf da, gute Unterstützung bieten aber die genannten Erweiterungen, um den Arbeitsprozess zu beschleunigen.

Wer täglich mehrere Stunden mit Visual Studio an größeren Projekten verbringt, wird die Fehlerbereinigungen der neuen Version schätzen. Entwickler, die Interesse an der asynchronen Entwicklung haben, werden die Unterstützung durch Async und Await als sinnvolle Ergänzung empfinden, auch für diese wird sich der Umstieg wahrscheinlich lohnen.

Visual Studio 2012 ist bei Microsoft erhältlich.

Wer die neuen Features von Visual Studio 2012 ersteinmal ausprobieren oder sich von der Stabilität der Entwicklungsumgebung überzeugen lassen möchte, kann sich die 90-Tage-Testversion kostenlos herunterladen.

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.