Mehr von Jürgen Gutsch

Mehr von Jürgen Gutsch

Empfehlungen von Jürgen Gutsch

Blog-Empfehlungen von Jürgen Gutsch

Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe

Jürgen Gutsch

ASP.NET und mehr...

News

BASTA! Spring 2010: Das wars …

Ich habe es tatsächlich geschafft und über jede besuchte Session einen Beitrag geschrieben und ich habe es geschafft, innerhalb einer Woche Robertos Beiträge von der Startseite zu verbannen :-P Fazit: Ich werd es da nächste mal definitiv nicht mehr so machen, da es zeitweise ganz schön in Stress ausarten kann. ;-)

Meine “spammerei” ist somit also rum und ich hole hiermit Robertos absolut lesenswerte Beiträge wieder nach oben:

DI / IoC Container LightCore Teil 1: Einführung
DI / IoC Container LightCore Teil 2: Registrierung über Xml Modul
DI / IoC Container LightCore Teil 3: Registrierung von Generics

Insgesamt waren es 5 Spannende und interessante Tage. Bis auf ein zwei Sessions haben sich alle Sessions gelohnt. Sehr schade war allerdings die halbe Stunde am Donnerstag Abend, die sich Abschlussveranstaltung nannte, in der die vielen Preise verlost wurden und sonst nichts mehr statt fand. Nach dieser “Abschlussverasntaltung” schien die BASTA! von einer Sekunde auf die andere vorbei, es gab keine Party, die meisten Leute waren auf einmal weg. Lediglich Gregor, Robert, Roberto, Peter und ich blieben noch eine Weile beim Bierchen sitzen, bzw. Roberto und ich quatschten noch bis um ca. 22 Uhr, bevor auch ich mich auf den Weg machte.

DotNetKicks-DE Image
BASTA! Tag 5: Ein Tag mit Windows Azure

Warum Windows Azure? Das ist der einzige Workshop m Freitag, der für mich ein absolut neues Thema beinhaltet. Ich hatte bisher nur sehr wenig über Azure gelesen, aber nie wirklich angeschaut. Ich bin also sehr gespannt, was der Workshop alles bringen wird.

Bevor Rainer Stropek mit dem Eigentlichen Workshop beginnt, beschreibt er die Möglichkeiten, die Nachteile und die Vorteile von Windows Azure und Cloud Computing allgemein. Ebenso geht er auf die Datenschutzbedenken ein, die bei der Arbeite mit Windows Azure auftreten. Das Ergebnis ist, das es Recht kritisch ist Azure zu verwenden, dass man genau überlegen sollte, welche Daten man in der Cloud ablegen möchte. Später kommt er zu den Voraussetzungen für die Entwicklung mit Windows Azure.

Vor der Kaffeepause zeigt Rainer eine eine kleine “Hallo Welt”-Demo einer kleinen Cloud-Anwendung.

Nach der Pause ging es weiter mit der Entwicklung einer klassischen ASP.NET Anwendung die anschließend in die Cloud gestellt werden soll. Es ist erstaunlich, wie einfach es ist mit der SDK zu arbeiten und lokal die Cloud-Anwendung zu testen. Das Deploying mit Windows Azure schient dafür um einiges komplizierter zu sein :-/

Für mich selber sehe ich noch keinen Anwendungsfall für Windows Azure, allerdings kann man damit eine ganze Menge möglich machen und bietet einige bequeme Funktionen und Leistungen und insgesamt ist der Workshop sehr interessant und gut durchdacht und es machte Spaß mit Windows Azure herumzuspielen.

Weitere Informationen zu Windows Azure:
http://www.microsoft.com/windowsazure/

Azure Portal:
http://windows.azure.com/

Get started:
http://www.microsoft.com/windowsazure/getstarted/

Azure in der MSDN:
http://msdn.microsoft.com/de-de/azure/cc994380.aspx

DotNetKicks-DE Image
Fazit zu Speed Freak C# and .NET!

Golo Roden fragte mich zu dem Beitrag über die BASTA! Session “Speed Freak C# and .NET!” von Christian Gross, was den mein Fazit zu dem Thema sei, ob wir jetzt alle öffentliche Felder statt Eigenschaften nutzen sollten, um die Performance der Anwendung zu steigern. Also wieder Crap Code statt Clean Code schreiben sollen.

Das ist definitiv nicht der Fall. Wir sollten natürlich weiterhin Clean Code schreiben. Bei normalen Anwendungen macht es keinen merkbaren Unterschied in der Geschwindigkeit aus, ob wir nun öffentliche Felder oder Eigenschaften verwenden

Diese Session hieß nicht umsonst “Speed Freak …”. In dem Fall der gezeigten Bloomberg Anwendungen ging es um mehrere tausende von Daten die Live dargestellt werden sollten, wie z. B: einem Börsenticker der live alle aktuellen Börsenkurse anzeigt. Der “Speed Freak” wollte zudem Beweisen, dass C# unter Umständen und unter Einhaltung bestimmter Regeln schneller sein kann als C++. Was er auch tatsächlich geschafft hat.

Ich bin nun der Meinung dass es möglich sein sollte, unter bestimmten Voraussetzungen die klassischen Regeln der Objektorientierung und Clean Code zu ignorieren. Und zwar dann, wenn es darum geht mehrere tausende von Daten auf einmal zu verarbeiten und darzustellen, bzw. dann wenn unbedingt Geschwindigkeit erforderlich ist. Und auch dann müssen diese performancesteigernden Möglichkeiten nicht auf die komplette Anwendung angewendet werden, sondern lediglich auf den Teil der Anwendung, der die entsprechende Leistung bringen muss. Wir dürfen nicht auf vorhandene Regeln und Gesetzte pochen, sondern sollten in Ausnahmefällen auch mal über den Tellerrand schauen und wenn es erforderlich ist, diese Regeln zu brechen, um möglicherweise auch auf diese Art noch etwas effektiveren Code zu schreiben.

DotNetKicks-DE Image
BASTA! Tag 4: NHibernate – The Open Source ORM Framework

Meine letzte Session des Tages startet Hadi Hariri mit viel Humor in eine umfangreiche Einführung in die Vorteile von Domain Driven Design und O/R-Mapping.

Hadi erklärt tatsächlich drei Varianten das Mapping zu definieren: Attributes, Mapping File und (na endlich) Fluent Mapping (Das Fluent NHibernate hatte ich nämlich in der letzten NHibernate Session vermisst) Weiter geht es mit der Beschreibung der Features von NHibernate: Transaction, Units of Work, Sessions, Flush Mode, etc… und anschließend mit einigen Demos zu den Mappings. Für die Abfrage der Daten empfiehlt Hadi einen der Beiden LINQ to NHibernate Provider zu nutzen und nicht die anderen drei Möglichkeiten HQL, Criterias und SQL.

In der letzten Demo geht Hadi auf Fluent NHibernate ein :-) Interessant ist, dass Fluent NHibernate zwar nicht alle Mapping-Möglichkeiten abdeckt, aber, dass Fluent NHibernate mit XML-Mappings kombiniert werden kann.

DotNetKicks-DE Image
BASTA! Tag 4: 10 spannende Sachen, die man mit SQL Server CLR-Integration machen kann

In dieser Session startet Thorsten Kansy (dotnetconsulting.eu) mit den Grundlagen der CLR Integration des SQL Servers, bevor er damit beginnt die 10 spannenden Sachen aufzuzählen. Interessant, dass CLR pro DB aktiviert werden muss und die Assemblies werden in der DB selber gespeichert. Letzteres vereinfacht die Weitergabe und Sicherung der DB mit den Assemblies. Zudem sollte die Assemblies signiert werden und muss mit bestimmten Sicherheitsstufen ausgezeichnet werden. Weiter geht es mit der Beschreibung der Visual Studio Unterstützung für die CLR-Integration. Bei der CLR-Integration müssen natürlich SQL-Datentypen übergeben oder zurückgegeben werden und nicht .NET-Datentypen. Zum debuggen werden Start-SQL-Scripts geschrieben, die die angelegten Funktionen aufrufen.

1. Reguläre Ausdrücke:
Funktionen im bereitstellen um im TSQL Reguläre Ausdrücke bereitzustellen.

2. Freie Datumsformatierung
Beliebige Formatierung von Datumswerten mit Hilfe der .NET DateTime.ToString().

3. String Concat
Verkettung von Zeichenketten, über mehrere Datensätze.

4. Asymmetrische Verschlüsselung
Verschlüsselung und Entschlüsselung von DB Inhalten.

5. Doubletten-Suche
Suchen von doppelten DB Einträgen, nach bestimmten Regeln.

6. SMTP E-Mailversand
Erweiterter Versand von E-Mails.

7. Aktuelle Börsenkurse abfragen
Abfragen über XML Dienste.

8. Benutzerdefinierter Datentyp
Eigene Datentypen die in der DB genutzt werden können.

9. Tabelleninhalt exportieren
Für den Export nach XML oder CSV

10. SSRS Bericht per E-Mail senden
SQL Server Reporting Service Berichte als PDF per E-Mail versenden

DotNetKicks-DE Image
BASTA! Tag 4: NHibernate und Spring.Net

Und wieder einmal Manfred Stayer ;-) Er startet mit einer Einführung in O/R-Mapping und in NHibernate. Bei der Beschreibung von NHibernate geht Manfred sehr detailliert auf das Mapping und die Konfiguration per XML ein und zeigt per LiveCoding die Funktionsweise von NHibernate. in einem weiteren LiveDemo stellt Manfred auch LINQ to NHibernate vor.

Weiter geht es mit einer LiveDemo mit Spring.NET als Dependency Injection Container und Service Locator. Etwas enttäuschend, denn nur um DI zu zeigen hätte ich eher einen kleineren schlankeren DI-Container verwendet.

Anschließend geht Manfred kurz auf die weiteren Features von Spring.Net ein, z. B: Transaktionsmanagement, Unterstützung fürs Unittesting. Zum Schluss zeigt Manfred die Vor- und Nachteile von NHibernate und Spring.Net.

DotNetKicks-DE Image
BASTA! Tag 4 Keynote: Writing Functional Code

“Why Functional Code Matters”

Ted Neward vergleicht anhand diverse Methoden, die herkömmlichen objektorientierten Programmiersprachen mit funktionalen Programmiersprache. Ted beschreibt die Vorteile von funktionalen Sprachen bei diesen Methoden und vor allem die Nachteile und beschreibt, was diese besser machen können als die herkömmlichen Sprachen, bzw.  für was funktionale Programmierung eingesetzt werden kann. In dieser einstündigen Keynote geht Ted sehr umfangreich und ausführlich auf dieses Thema ein.

(Ich möchte hier nicht detailliert auf die einzelnen beschriebenen Aspekte eingehen, da es hier im Moment einfach zu viel ist)

Zum Abschluss relativiert er seine provokanten Ansichten über funktionale Programmierung in dem er sagt, dass funktionale Programmierung die objektorientierte nicht ersetzen soll, sondern eher als unterstützendes Werkzeug angesehen werden sollte.

DotNetKicks-DE Image
BASTA! Tag 4: Data Binding Deep Dive

Was man aus dem Titel dieser Session vom Rainer Stropek (software architects) leider nicht sehen konnte war, dass es sich hier um Databinding in Silverlight und WPF handelt. Rainer Stropek beginnt mit einer sehr anschaulichen Einführung in das MVVM. Cool an dieser Session: Rainer hält einen Vortrag ohne Powerpoint, sondern nutzt einen eigenen CodeProject-Artikel als Präsentaton und zeigt die Beispiele per LiveCoding direkt im VS2010.

Auch wenn ich mit WPF und Silverlight noch nicht wirklich viel anfangen kann, ist der Vortrag von Rainer – auch für mich – absolut nachvollziehbar und anschaulich. Respekt :-)

DotNetKicks-DE Image
BASTA! Tag 4: Intensions & Interfaces – Making Patterns Concrete

Udi Dahan (udidahan.com) beginnt in dieser Session mit der Beschreibung wie Software immer komplexer und komplexer werden kann und das es das Ziel sein sollte Software flexibel zu machen und flexibel zu halten.

Oh man, es ist zu früh um einem englischsprachigen Sprecher, bei einem Thema über Design Patterns zu folgen und dabei mit zu schreiben… ;-) Daher an dieser Stelle erst mal keine weiteren Infos. Ich werde am Wochenende diese sehr, sehr interessante Session in eigene Worte fassen und an dieser Stelle posten. Ich bitte das zu Entschuldigen… :-(

DotNetKicks-DE Image
BASTA! Tag 3: Advanced Hacking

In dieser sehr interessanten Session geht Michael Thumann (Enno Rey Netzwerke GmbH) auf die Problemantik von SQL Injection. Er startet mit einer Einführung in die SQL Injection für diejenigen die noch nie was damit zu tun haben. Laut Handzeichen leider überrachend viele :-(

Michael beschreibt wie man mit Hilfe von SQL Injection Betriebssystemfunktionen aufruft um das System zu manipulieren. Wichtig ist hier auf jeden Fall einen Benutzer für den Zugriff auf den SQL zu verwenden der nur die mindestberechtigungen hat. Der SQL Server darf nicht mit Administratorrechten starten.

Im zweiten Teil seiner Session beschreibt Michael wie man mit Hilfe von Treibern Hintertürchen im System öffnen kann. Über die Treiber deshalb, da man damit so nah am System ist um genügend Berechtigung im System zu haben. Dabei beschreibt er wie man an der Treibersignierung vom Microsoft vorbei kommen kann.

Im dritten und letzten Teil der Session möchte Michael die vorangegangenen Techniken gemeinsam anwenden. Also mit SQL Injection einen Treiber als Hintertürchen installieren.

DotNetKicks-DE Image
BASTA! Tag 3 Keynote: Why Software Sucks

… and What You Can Do About It

Diese Keynote ist eine sehr unterhaltsamsten: David S Platt (http://www.rollthunder.com/) geht mit sehr viel Humor in diese Keynote. Jeder zweite Satz sorgt für Lacher im Publikum.

Der Usability Experte beginnt mit einer Darstellung der unbeliebtesten Branchen in der USA, mit dem Resultat: “Anwender hassen uns (Softwareentwickler) mehr als die Gebrauchtwagenhändler ;-)” Und stellt die Frage warum das so ist.

Ich stelle hier einfach mal ein paar Markante Aussagen von Platt wieder, da man diese Keynote eigentlich selber sehen muss.

Platt’s First, Last and Only Law of User Experience Design: Know Thy User For He Is Not Thee

“The user is not you” ist eine Aussage die Platt im Laufe der Keynote immer wiederholt und z. B: mit folgenden Zahlen belegt:

Nur 5% Entwickler sind weiblich; in der US Bevölkerung gibt es aber 52% Frauen die Software anwenden. Daraus ist zu schließen, dass 47% der männlichen Entwickler für Frauen entwickeln. Wie soll das gut gehen? “The user is not you”

Eine Interessante Frage, die vom Publikum erst nach einem Hinweis beantwortet werden konnte: “What is your customer buying?” Der Kunde kauft eine Idee, eine Vorstellung, einen “Traum” und bekommt vom Softwareentwickler lediglich etwas mit dem er sich den Hintern abwischen kann.

Alle User von Software wollen, laut Platt, das gleiche: “I just want it to work.” Platts Empfehlung an die Softwareentwicklung: “Make it just work!”. Es sind weniger Features zu implementieren die funktionieren, statt viele die der User nicht bedienen kann. Ein Feature das der User nicht bedienen kann ist ein Feature das nicht funktioniert. Wir ENtsickler sollten den User nicht zwingen irgendwelche Features auf irgend eine bestimmte Art zu benutzen um Seiteneffekte zu vermeiden. Wir sollten dem User Features anbieten die nur das tun was sie tun sollen und schon gar keine Seiteneffekte haben.

ALs schlechtes Beispiel nannte er die Menubar in einer älteren MS Word Version die sich versehentlich aus der Anwendung ziehen lassen kann, so das man eine floatende Menubar erhält. Das herausziehen der Menubar ist ein Feature, das man an dieser Stelle nicht benötigt und sogar eher hindernd ist.

Als gutes Beispiel nannte er Google, das es schafft das Herkunftsland des Anwenders zu bestimmen und die Sprache entsprechend zur Verfügung stellt. Demgegenüber nannte er UPS.com als schlechtes Beispiel, wo man als User – egal in welchem Land man sich befindet – erst mal sein Land in einer Dropdown Box suchen muss, im Extremfall mehrere Klicks benötigt um in der riesen Liste sein Land zu finden. Gibt man statt dessen seine UPS-Paketverfolgungsnummer bei Google ein, erhält man auf Anhieb die Gewünschte UPS Seite in seiner Sprache…

Ein weiteres böses Beispiel war die Auswahl auf einem Installer einer Backup-Software: Man konnte auswählen, ob man die Installation “normal” oder “einfach” haben will…

Der Besuch dieser Keynote hat sich auf alle Fälle gelohnt :-)

DotNetKicks-DE Image
BASTA! Tag 3: Speed Freak C# and .NET!

Christian Gross legte eine wirklich beeindruckende Session hin. Als erste zeigte er eine Bloomberg Anwendung die Real Time Daten live visualisierte. Desweiteren Empfahl er vor jeder weiteren Demo erst einmal dotTrace von JetBrains als Profiler um Performanceproblemen auf den Grund zu kommen. Gut das waren die ersten fünf Minuten der Session :-)

Ab jetzt zeigte er eine Reihe von beeindruckenden Demos. Angefangen mit dem Hinweis, dass Properties mit Gettern und Settern um einiges langsamer sind als öffentliche Felder.

In einer weiteren Demo mit mehreren tausend Schleifendurchläufen zeigte er dass die Verwendung von Klassen als Datenobjekte um einiges langsamer sind als Structs. Schneller als Structs allerdings sind mehrdimensionale Arrays. Aus Gründen der Lesbarkeit empfiehlt Cristian allerdings Structs zu verwenden.

Weiter ging es mit dem Umwandeln von Objekten von einem Typ in den anderen. Das Ergebnis: Casts kosten, eine Prüfung vor einem Cast kostet noch mehr. Zu casten und dabei Fehler mit einem Try-Catch-Block abzufangen kostet um einiges mehr. Die Lösung: “Know your types!!!”, also Casts vermeiden und typisiert arbeiten (Generics verwenden).

Auch interessant war, dass Vererbung und Implementierung von Interfaces einen Massiven Einfluss auf die Performance hat. Methoden die Vererbt, überschrieben oder über ein Interface implementiert wurden waren um ca. das 200fache langsamer als Aufrufe von Methoden aus einfachen Klassen oder Structs.

Und am Schluss kam das aller beste: C# ist schneller als C++! Christian zeigte die gleiche Demo in C++ und C#, dabei war die C# Demo doppelt so schnell wie die C++ Demo. Und es ging noch besser. Mich Codegenerierung per ExpressionTrees halbierte er die Zeiten noch einmal um die hälfte.

Bisher war das auf der BASTA! die beeindruckteste Session :-)

DotNetKicks-DE Image
BASTA! Tag 3: Windows Identity Foundation

Erster Hinweis von Dominick Baier (thinktecture) zu Windows Identity Foundation ist, dass WIF als Windows Update kommt und ein Teil von Windows sein wird. Also im Prinzip das neue Windows Security System, ohne ein Teil von .NET zu sein.

Über die Beschreibung der klassischen Identifizierungsmöglichkeiten von .NET 1.0 bis hin zu .NET 3.0 leitet Dominick über zu WIF.

Neu an der Art wie WIF arbeitet ist: Sogenannte Claims beschreiben Sicherheitfeatures. Beispiel Rollen, Gruppen, Berechtigungen sind Claims. Claim ist im Prinzip die Basisklasse aller Sicherheitsobjekte. Mit WIF lassen sich auf diese Art beliebige Security-Systeme abbilden, bzw. nachbilden. Um dieses Konzept wurde mit WIF ein neues Framework gebaut.

WIF liefert einen neue Assembly “Microsoft.IdentityModel”. WIF liefert auch zwei neue Inderfaces IClaimsIdentity und IClaimsPrincipal. Wenn man genau nachschaut, sieht man das diese beiden Interfaces von IIdentity und IPrincipal erben, was den Vorteil hat, dass WIF abwärtskompatibel ist. WIF erweitert diese beiden klassischen Interfaces mit Eigenschaften, die die vorhandenen Interfaces um einiges flexibler machen.

WIF wird dadurch sehr flexibel um Identities, bzw. genauer: ClaimsIdentities zu beschreiben. Desweiteren liefert WIF diverse Handler (TokenHandler) um Identities von Systemen wie AD, aus dem HttpContext, etc, in ClaimsIdentities zu konvertieren. Der TokenHandler ließt die Eigenschaften aus, erstellt entsprechende Claims und erstellt mit diesen eine ClaimsIdentity. Aus dieser ClaimsIdentity wird ein ClaimsPrinciple erzeugt der dann in der Anwendung genutzt werden kann.

In ASP.NET wird WIF über HttpModule aktiviert und gesteuert. Innerhalb von ASP.NET wird dann ebenfalls mit ClaimsIdentities und ClaimsPrinciples gearbeitet. Alte Anwendungen müssen für WIF nicht umgeschrieben werden, außer die Registrierung der Module in der Web.Config, da die Identities und Principles ja abwärtskompatibel sind.

Die Möglichkeiten von WIF sind so flexibel und umfangreich und ist auf jeden Fall einen separaten Blogbeitrag wert, nachdem ich mal etwas damit herumgespielt habe.

Und was ist mit Single Sign-On? SSO hat im Prinzip nichts mit WIF zu tun, sondern um SSO zu unterstützen muss einfach ein anderer TokenHandler genutzt werden. Für SSO wird z. B: ein SAML-Token genutzt, der von einem Identity Provider (wie z. B: Windows Live Login) geliefert wird. Der Token Handler erzeigt anhand des Tokens dann wie oben beschrieben ein ClaimsIdentity Objekt. Es kann jeder beliebige Security Token Service als Identity Provider genutzt werden, wichtig ist nur das ein TokenHandler existiert, der das Token verarbeiten kann.

DotNetKicks-DE Image
BASTA! Tag 3 Keynote: – Windows Phone – Die Zukunft hat begonnen

Ganz spontan wurde aus aktuellem Anlass für 14:00 Uhr eine Keynote zu Wondows Phone angekündigt. Frank Prengel von Microsoft, erzählt uns Neues von Windows Mobile, bzw. Windows Phone. Als erstes erzählt Frank von Neuerungen innerhalb des Windows Mobile Maketplace, und stellt des weiteren die Gewinner des Entwickler-Wettbewerbes “Marketplace – Fertig – Los” vor.

Es gibt weiterhin Verbesserungen für Windows Mobile 6.5.3 damit es auch für moderne Gräte bedienbar bleibt.

Auf zum Thema Windows Phone: Frank lässt nun das bekannt Video zu den Windows Phone 7 Series abspielen, das der eine oder andere ganz sicher schon im Netz gesehen hat. Tolle Bilder auf jeden Fall. Hoffen wir, dass Microsoft in dem Video nicht zu viel verspricht…

Windows Mobile ist scheinbar komplett neu entwickelt worden. Windows Phone ist eine Kombination aus Zune und Windows Mobile, um die Einfache Bedienung von Zune auch im Windows Mobile nutzen zu können. Windows Phone soll unter anderem alle Microsoft Onlinedienste auf ein Gerät zusammenbringen.

Mehr Infos dazu unter www.windowsphone7series.com

Wie werden Anwendungen für Windows Phone entwickelt? Frank wollte nicht konkrete Beispiele nennen, sonder verwies auf die kommende MIX10. Er nannte lediglich das Stichwort “Expression Blend”. Es scheint also darauf hinaus zu laufen, dass Anwendungen in Zukunft mit WPF entwickelt werden können.

DotNetKicks-DE Image
BASTA! Tag 3: Parallel Computing: von LINQ nach PLINQ

Marc André Zhou (Logica Deutschland GmbH Co. KG) fängt in dieser Session an mit einer schneller Einführung in die Parallelität. Fast eine Wiederholung der vorigen Session.

PLINQ eignet sich nicht für LINQ to SQL, bzw. nicht für LINQ Provider die Abfragen auf eine externe Datenquelle vornehmen, eignet sich also nur für In-Memory-Daten, bzw. bereits geladene Daten. Das reine LINQ eignet sich dagegen optimal für die Parallelisierung. PLINQ prüft selber, ob es nötig ist eine Abfrage parallel auszuführen oder nicht. Dafür ist ein Query Analysis zuständig. Andersherum ist es unter Umständen auch möglich, PLINQ generell zu zwingen Queries parallel auszuführen.

Interessant wird PLINQ allerdings nur bei LINQ-Abfragen, die mehr tun, bzw. rechenintensiv sind. Es macht keinen Sinn einfache LINQ-Abfragen zu parallelisieren, die Performance wird dann eher abnehmen, da PLINQ selber einiges an Overhead mitbringt. Was man bei PLINQ beachten sollte ist dass, außer bei Queries auf Arrays, die vorhergehende Sortierung verloren geht. Das hängt damit zusammen, das die Verarbeitung des Queries, bzw. die Datensätze auf verschiedene Prozessorkerne verteilt wird und die Datensätze nach der Verarbeitung anders zusammengesetzt werden können. Bei Arrays mit fixen Index-Werten ist das nicht der Fall, da die Datensätze wieder an den ursprünglichen Index zurückgespielt werden können.

Interessant ist der asynchrone Abruf der verarbeiteten Daten. PLINQ kann abfragen (Poll), wo bereits Daten verarbeitet worden sind, diese Einsammeln und weitergeben, obwohl der Query noch nicht komplett verarbeitet worden ist.

DotNetKicks-DE Image
Mehr Beiträge Nächste Seite »