ForEach(IEnumerable source, Action body); Parallel.For(int frominclusive, int toexclusive, Action body)

Größe: px
Ab Seite anzeigen:

Download "ForEach(IEnumerable source, Action body); Parallel.For(int frominclusive, int toexclusive, Action body)"

Transkript

1 Parallele Programmierung und Datenfluss mit.net Gleichzeitig zum Erfolg Zur Implementierung von asynchroner und paralleler Verarbeitung bietet.net unterschiedlichste Modelle an. Wer sie kennt, kann seine Anwendungen produktiver gestalten und für andere verständlicher machen. Auf einen Blick Dipl.-Inf. (FH) Peter Meinl (www.petermeinl.de) ist IT- Berater, Trainer und passionierter Querdenker. Er entwirft und realisiert seit über 25 Jahren datenbankorientierte und verteilte Anwendungen. Sein fachlicher Schwerpunkt ist der Entwurf kundenspezifischer Lösungen für die Fertigungsindustrie. Er programmiert regelmäßig, weil Berater und Architekten Code schreiben müssen, um zu verstehen, worüber sie reden und was sie Programmierern zumuten. Inhalt Parallele Programmierung mit Task, Parallel.For*() und Datenfluss. Ein Web Crawler als Beispiel für die Anwendung von Datenfluss. Datenstrukturen für parallele Programmierung. Verwandte Frameworks. dnpcode A1306AsyncParallel A synchronität und Parallelität sind im.net-mainstream angekommen und jeder Berater, Architekt und Programmierer sollte ein Grundverständnis davon haben. Bisher ging es in dieser Serie um Grundlagen und die unterschiedlichen asynchronen Programmiermodelle [1]. Nun folgt ein Überblick zur parallelen Programmierung inklusive Datenfluss mit.net und zu weiteren interessanten Frameworks in diesem Zusammenhang. Ein Praxisbeispiel mit einem Dateiprozessor, der Dateien mit Tasks, Datenfluss [2], Parallel. For() und dem Managed Extensibility Framework verarbeitet, war in Ausgabe 4/2013 der dotnetpro zu finden [3]. Spezielle Komplikationen bei der Fehlerbehandlung unter paralleler Programmierung behandelte ein anderer Beitrag in der dotnetpro [4]. Zur parallelen Programmierung bietet das.net Framework: Parallelität über Daten Parallelität von Aufgaben asynchrone Datenflüsse paralleles LINQ (PLINQ) Datenstrukturen für parallele Programmierung Parallelität über Daten Mit parallelen Schleifen ist es möglich, dieselben Operationen parallel jeweils auf die Datenelemente einer Liste anzuwenden. Sie realisieren das Entwurfsmuster Fork/Join. In ihrer einfachsten Form sehen die Schleifen Parallel.ForEach() und.for() wie folgt aus: ForEach<TSource>(IEnumerable<TSource> source, Action<TSource> body); Parallel.For(int frominclusive, int toexclusive, Action<int> body) Die Parallel.For*()-Methoden verwenden eine dynamische Anzahl von Tasks. Sie beginnen mit einer Task und erzeugen ein Replikat von sich, sobald diese Task ausgeführt wird. Wenn das Replikat ausgeführt wird, erzeugt es wieder ein Replikat von sich und immer so weiter. Damit verwendet Parallel so viele Tasks wie der zugrunde liegende Scheduler bereitstellt. Parallel.For*() bietet folgende Features, also Merkmale: Abbruch bei Ausnahmen und Auslösen einer AggregateException manueller Abbruch via ParallelLoopState. Break() und.stop() kooperativer Abbruch ParallelLoopState MaxDegreeOfParallelism adaptive Partitionierung und Lastverteilung eigene Partitionierung eigene Scheduler Parallele Schleifen müssen unbedingt so codiert werden, dass ihre Durchläufe unabhängig voneinander sind. Im folgenden Beispiel wird der Zähler primecount mittels Interlocked. Partitionierung der Daten Mit Partitionierung bezeichnet man im Rahmen der Datenparallelität das Aufteilen einer Liste von Datenelementen zur parallelen Verarbeitung durch mehrere Rechnerkerne. Ohne Partitionierung würden alle Elemente seriell auf einem Kern verarbeitet. Bei der Bereichspartitionierung wird die Liste einmalig in feste gleich große Abschnitte aufgeteilt. Bei der Blockpartitionierung wird jeweils eine Anzahl von Datenelementen als Partition geliefert. Dabei wird deren Zahl (chunk size) zunehmend größer (1, 2, 4, 8 ). Die Bereichspartitionierung hat den geringeren Overhead beim Partitionieren, weil sich die verarbeitenden Threads dazu nicht abstimmen müssen. Sie bietet aber keine Lastverteilung für den Fall, dass die einzelnen Verarbeitungen verschieden aufwendig sind. Die Blockpartitionierung bietet zwar Lastverteilung, aber der Overhead für das Partitionieren ist hierbei höher, weil sich die Threads für die jeweils nächste Partition abstimmen müssen. Die Möglichkeiten der Partitionierung hängen vom Typ der Datenliste ab. Bei IList und Array ist im Unterschied zu IEnumerable die Anzahl der Elemente bekannt und sie lassen sich indizieren. Falls die Reihenfolge der Daten eine Rolle spielt, können Order able Partitioner verwendet werden. Wenn zum Beispiel PLINQ oder Parallel.ForEach() ein IEnumerable zum Parallelisieren übergeben wird, dann verwenden diese normalerweise einen Blockpartitionierer, der jedes Mal, wenn ein Thread neue Daten braucht, ein oder mehrere Datenelemente zurückgibt. Dieses Verhalten können Sie überschreiben, indem Sie zum Beispiel Parallel.ForEach() einen statischen Bereichspartitionierer übergeben oder für PLINQ einen Load- Balancing-Partitionierer konfigurieren [20, 21]

2 Increment() über Parallel.ForEach() synchronisiert: Dim primecount As Integer Parallel.ForEach( Enumerable.Range(0, ).ToArray(), Sub(n) If IsPrime(n) Then Interlocked.Increment(primeCount) End Sub) Mithilfe von Überladungen mit Loop State sowie der Actions localinit und localfinally lässt sich das Leistungsverhalten solcher Konstrukte optimieren, aber mit deutlich höherer Komplexität. Häufig ist es in solchen Fällen einfacher, PLINQ zu verwenden: Dim primecount = ParallelEnumerable. Range(0, ). Sum(Function(i) IIf(IsPrime(i), 1, 0)) Die ParallelOptions-Eigenschaft Max DegreeOfParallelism kann begrenzen, wie viele ThreadPool-Threads der Scheduler maximal injizieren darf. Dieses Merkmal ist für Ausnahmefälle gedacht, zum Beispiel wenn die Scheduler-Heuristik beim Ermitteln der angemessenen Anzahl Threads versagt oder wenn mehrere Algorithmen gleichzeitig parallelisiert werden sollen. Der Threadpool-Scheduler kann zum Beispiel nicht unterscheiden zwischen Threads, die lange Schleifendurchläufe berechnen, und solchen Threads, die durch synchrone Ein- und Ausgabeoperationen blockiert sind. Aus diesem Grund erzeugt er bei langen Schleifendurchläufen zu viele Threads, um einen vermeintlichen Mangel an Threads zu vermeiden. In solchen Fällen können Sie die Schleifendurchläufe verkürzen oder MaxDegreeOf Parallelism einsetzen. Die häufig zitierte Annahme, ein Thread pro Kern sei optimal, passt für viele Szenarien nicht; zum Beispiel würden damit Kerne leer laufen, während Threads auf Datei-I/O, Netzwerk-I/O, Speicherzuteilungen oder Locks warten. Beim Begrenzen der Thread-Anzahl sollte die Skalierbarkeit nicht aus dem Blickfeld geraten und wenigstens mit Environment.ProcessorCount die Anzahl der Kerne (nicht der CPUs!) auf dem aktuellen Rechner als Basis dienen. Ein unbedachtes Begrenzen der Anzahl von Threads kann zusammen mit synchronen Ein-/Ausgabeoperationen oder Locks leicht zu Thread-Mangel führen. Die Partitionierung der Daten ist wesentlich für die Performanz von parallelen Schleifen, siehe Kasten Partitionierung der Daten. Im folgenden Beispiel ist die Verarbeitung in der Schleife sehr kurz und deshalb wird ein Bereichspartitionierer verwendet, der Abschnitte von jeweils Werten bildet. Damit führt die optimierte Schleife nur noch 20 parallele Iterationen aus: Dim mydata As Double() = New Double( ) {} Parallel.ForEach(data, Sub(item, state, i) result(i) = item * item End Sub) Parallel.ForEach(Partitioner.Create(0, , 50000), Sub(range) For i As Double = range.item1 To range.item2-1 mydata(i) = i * i Next End Sub) Parallelität von Aufgaben Mit Parallel.Invoke() ist es möglich, eine willkürliche Anzahl unterschiedlicher Aufgaben parallel auszuführen, indem ein Array von Actions übergeben wird. Am einfachsten geht das mittels Lambda- Ausdrücken: Parallel.Invoke(Sub() GetProductInfoFromDB, Sub() ComputeDiscount) Parallel.Invoke() realisiert genauso wie Parallel.For*() das Entwurfsmuster Fork/ Join, wartet also auf das Ende der Verarbeitungen. Für mehr Kontrolle über das Scheduling lassen sich Tasks explizit starten: Dim t1 = Task.Factory.StartNew() (Sub()ComputeDiscount, TaskScheduler. FromCurrentSynchronizationContext) Dim t2 =... Task.WaitAll(t1, t2) Parallel LINQ Parallel LINQ, kurz PLINQ, bietet Parallelität über Daten im deklarativen LINQ- Stil. AsParallel() leitet die parallele Verarbeitung in LINQ ein: Dim myobjects As Double() = New Double( ) {} Dim q = myobjects.asparallel. Where(Function(d) ExpensiveFilter(d)) Mit.ForAll() lassen sich PLINQ-Ergebnisse parallel verarbeiten. Damit sind Verarbeitungen wie in einer Parallel.For*()- Schleife realisierbar, aber mit der Eleganz von LINQ und mit dessen Merkmalen wie Filterung. PLINQ verwendet immer eine fixe Anzahl von Tasks, der voreingestellte Wert ist Environment.ProcessorCount. Die Methode WithDegreeOfParallelism() kann dafür einen anderen Wert setzen. From site In New String() { "www.petermeinl.de", "..."}. AsParallel.WithDegreeOfParallelism(4) Let p = New Ping().Send(site) Select p.roundtriptime Mit einem expliziten Partitioner lässt sich Lastenverteilung (siehe Kasten) erzwingen: Dim files = Directory.GetFiles("c:\") Dim partitioner = Concurrent.Partitioner. Create(files, True) Dim ufiles = partitioner.asparallel. Select(Function(f) ParseFile(f)) Mit ParallelExecutionMode.ForceParallelism lässt sich PLINQ zum Parallelisieren zwingen und für Unterabfragen mit AsSequential() zur seriellen Verarbeitung bewegen. Viele Probleme lassen sich sowohl mit Parallel.For*() als auch mit PLINQ lösen. Pamela Vagata beschreibt in dem Artikel When Should I Use Parallel.ForEach? When Should I Use PLINQ? einige Vor- und Nachteile beider Lösungen [5]. Die Website zum Buch C# in a Nutshell [6] zeigt viele kleine Codebeispiele mit Parallel und PLINQ, die als Anregungen für mögliche Lösungen hilfreich sind. Speicherbereinigung Beim Parallelisieren sollte auch die Speicherbereinigung nicht zum Engpass werden. Vermeiden Sie, viele kleine Objekte zu allokieren, und prüfen Sie String-Verkettungen, Boxing und andere Speicherallokationen kritisch. Die.NET- Speicherbereinigung läuft normalerweise im Hintergrund in einem Einzel-Thread, sie skaliert also nicht über mehrere Kerne. Deshalb ist für parallelisierte Anwendungen die Speicherbereinigung für Server erwägenswert; diese nutzt einen Thread pro logischen Prozessor. Die Speicherbereinigung für Server lässt sich im Konfigurationsschema mit der Einstellung <gcserver enabled="true"> erzwingen. Asynchrone Datenflüsse (Data flow) TPL Dataflow (TDF) [7] ist für asynchrone Producer-Consumer-Szenarien mit Nachrichtenübergabe innerhalb eines Prozesses gedacht. Für prozessübergreifenden

3 Parallele Programmierung und Datenfluss mit.net Listing 1 Ein mit Task Dataflow realisierter Dateiprozessor. Sub Main() 'Reading files sequentially and asynchronously Dim reader As New TransformBlock(Of String, String)( Async Function(path) Using sr As New StreamReader(path) Dim filestring = Await sr.readtoendasync().configureawait(false) Return filestring End Using End Function) 'Processing file content concurrently Dim totalwordcount As Integer Dim processor As New ActionBlock(Of String)( Sub(content) Dim allwordsregex As New Regex("\S+") Dim wordcount = allwordsregex.matches(content).count Debug.Print("Processing result={0}", wordcount) Interlocked.Add(totalWordCount, wordcount) End Sub, New ExecutionDataflowBlockOptions With {.MaxDegreeOfParallelism = Environment.ProcessorCount}) processor.completion.continuewith( Sub() Console.WriteLine("totalWordCount={0}", totalwordcount) End Sub) reader.linkto(processor, New DataflowLinkOptions With {.PropagateCompletion = True}) For Each path In Directory.EnumerateFiles("x:\temp1\testfiles\in", "*.txt") reader.post(path) Next reader.complete() PromptUser("Working... Press <Enter> to exit:", ConsoleColor.White) End Sub [Abb. 1] Architektur eines mit Datenfluss realisierten Web Crawlers. Nachrichtenaustausch gibt es andere Lösungen, dazu mehr weiter unten im Abschnitt Verwandte Frameworks. Das Datenfluss-Programmiermodell ist am schnellsten anhand eines kleinen Beispiels zu verstehen. Listing 1 zeigt einen mit Datenfluss realisierten Dateiprozessor. Der TransformBlock reader liest Dateien sequentiell und asynchron. Der ActionBlock processor verarbeitet diese parallel, indem er mittels RegEx die Anzahl Worte in der Datei ermittelt. Dabei wird die Parallelität auf die Anzahl der Kerne des Rechners begrenzt. processor ist mit reader verlinkt. Die Verarbeitung wird mittels reader.post() ausgelöst. Mit reader.complete() wird reader mitgeteilt, dass es für den TransformBlock nichts mehr zu verarbeiten gibt. Mit Setzen der Eigenschaft PropagateCompletion auf True reagiert auch processor auf das Ende der Verarbeitung. Das Ergebnis der Verarbeitung wird in einer Fortsetzungs-Task von processor ausgegeben. Um die Dateien in einem Verzeichnis zu ermitteln, wird übrigens die neue Methode Directory.Enumerate Files() verwendet, die im Unterschied zu Directory.GetFiles() mittels eines IEnumerable sofort damit beginnt, Dateinamen zu liefern und nicht erst, nachdem sie alle ermittelt hat. Task.Run() setzt bereits ein einfaches Producer-Consumer-Muster um, denn Tasks werden ja asynchron auf dem Thread pool in eine Queue gestellt und konsumiert. Mit den Auflistungen aus dem Namensraum System.Collections. Concurrent lassen sich komplexere Producer-Consumer-Lösungen realisieren; dabei sind die Consumer aber synchron, weil sie beim Warten auf Nachrichten blockiert sind. Zum Thema eigene Producer-Consumer-Queues hat in der dotnetpro Michael Scheffler einen Artikel ver öffentlicht [8]. Der Datenfluss der Task Parallel Library führt Aktor-basierte Programmierung ein, bei der unabhängige Einheiten, sogenannte Aktoren oder Agenten, mittels Nachrichten synchron oder asynchron miteinander kommunizieren und diese asynchron verarbeiten. Die interne Verarbeitung in den Aktoren selbst kann dabei seriell oder parallel erfolgen. Es ist oft leichter, solche auf einzelnen Aktoren basierende Lösungen zu entwerfen und zu verstehen, als das ganze Problem auf einmal betrachten oder parallelisieren zu müssen. Auch skalieren sie meist besser und liefern höheren Durchsatz. Das folgende Beispiel zeigt einen Aktor vom Typ ActionBlock. Bei seiner Definition wird der Typ der Nachrichten in seiner Eingangs-Queue als Integer festgelegt und für die Verarbeitung wird die Funktion

4 DoProcessMessage() definiert. Die Methode Post() übergibt die Nachrichten an ihn. Mit SendAsync() lassen sich Nachrichten asynchron verschicken. Dim ab = New ActionBlock(Of Integer) _ (Function(i) DoProcessMessage(i)) ab.post(data1) ab.post(data2) ab.post(data3) Der Datenfluss der TPL bietet viele vordefinierte Datenflussblöcke. Ihre Namen geben zu erkennen, welche Merkmale sie bieten, Näheres siehe [7] und [2]. Buffering-Blöcke: BufferBlock BroadcastBlock WriteOnceBlock Ausführungsblöcke: ActionBlock TransformBlock TransformManyBlock Gruppierungsblöcke: BatchBlock JoinBlock BatchedJoinBlock Zur Verknüpfung der Blöcke gibt es die Methode LinkTo(), die auch programmierbare Filter unterstützt. Die Queues der Blöcke werden in FIFO-Reihenfolge abgearbeitet. Voreingestellt ist MaxDegreeOfParallelism mit dem Wert 1, Nachrichten werden also seriell abgearbeitet. Der maximale Grad der Parallelität lässt sich explizit festlegen; mit Dataflow BlockOptions.Unbounded kann er dem Task Scheduler überlassen werden. Weil es recht wenige konkrete Beispiele zum Datenfluss gibt, zeigen Abbildung 1 und Listing 2 einen Web Crawler. Er demonstriert insbesondere das Zusammenspiel der Blöcke. Der TransformBlock downloader liest den Inhalt einer Webseite asynchron und liefert je Seite einen String. Dabei verwendet er maximal vier Threads, lädt also maximal vier Seiten gleichzeitig aus dem Netz. Die TransformManyBlock-Objekte linkparser und imageparser lesen den Inhalt einer Seite mittels Html Agility Pack [9] und liefern je Seite mehrere URLs zu weiteren Seiten oder Bildern. Die beiden Parser sind über den BroadastBlock contentbrodcaster mit downloader verlinkt. Wären die beiden Consumer direkt mit downloader verlinkt, käme es zum Verhungern eines Listing 2 Mit Task Dataflow realisierter Web Crawler. Sub Main() 'Define Blocks Dim downloader As New TransformBlock(Of String, String)(Async Function(url) WriteLineInColor(url, ConsoleColor.White) Return Await New HttpClient().GetStringAsync(url).ConfigureAwait(False) End Function, New ExecutionDataflowBlockOptions With {.MaxDegreeOfParallelism = 4}) Dim contentbroadcaster As New BroadcastBlock(Of String)(Function(html) html) Dim linkparser As New TransformManyBlock(Of String, String)( Function(html) Dim doc As New HtmlDocument() doc.loadhtml(html) Return From n In doc.documentnode.descendants("a") Where n.attributes.contains("href") Let url = n.getattributevalue("href", "") Where url.startswith("http://") Select url End Function) Dim imageparser As New TransformManyBlock(Of String, String)( Function(html) Dim doc As New HtmlDocument() doc.loadhtml(html) Return From n In doc.documentnode.descendants("img") Where n.attributes.contains("src") Let url = n.getattributevalue("src", "") Where url.startswith("http://") Select url End Function) Dim linkbroadcaster As New BroadcastBlock(Of String)(Nothing) Dim imageprocessor As New ActionBlock(Of String)( Async Function(url) Dim uri As New Uri(url) Dim fileurl = If(String.IsNullOrWhiteSpace(uri.Query), uri.absoluteuri, uri. AbsoluteUri.Replace(uri.Query, "")) WriteLineInColor(fileUrl, ConsoleColor.Yellow) Dim webstream = Await (New HttpClient().GetStreamAsync(url)).ConfigureAwait(False) Dim filepath = New DirectoryInfo(Path.Combine(My.Application.Info.DirectoryPath, "..\..\..\Images", IO.Path.GetFileName(fileUrl)) ).FullName Using filestream = IO.File.OpenWrite(filePath) Await webstream.copytoasync(filestream).configureawait(false) End Using End Function) 'Handle unexpected errors downloader.completion.continuewith(sub(ant) WriteLineInColor(ant.Exception. GetBaseException.ToString, ConsoleColor.Red),, TaskContinuationOptions.OnlyOnFaulted))... imageprocessor.completion.continuewith(sub(ant) WriteLineInColor(ant.Exception. GetBaseException.ToString, ConsoleColor.Red),,TaskContinuationOptions.OnlyOnFaulted)) 'Link Blocks downloader.linkto(contentbroadcaster) contentbroadcaster.linkto(linkparser) contentbroadcaster.linkto(imageparser) linkparser.linkto(linkbroadcaster) linkbroadcaster.linkto(downloader) '.jpg just to demonstrate a link filter linkbroadcaster.linkto(imageprocessor, Function(url) url.endswith(".jpg")) imageparser.linkto(imageprocessor) 'Let's start downloader.post("http://www.bbc.co.uk/news/") PromptUser("Crawling... Press <Enter> to abort:", ConsoleColor.White)

5 Parallele Programmierung und Datenfluss mit.net der beiden, weil die meisten TDF-Blöcke im Unterschied zu den Reactive Extensions [10] Nachrichten nur an das erste verlinkte Ziel weitergeben, das diese akzeptiert. Ein BroadastBlock hat die Aufgabe, Nachrichten an viele Ziele gleichzeitig zu verteilen. Dabei werden diese im Allgemeinen geklont, um zu verhindern, dass alle Consumer mit derselben Nachrichteninstanz arbeiten. Somit ist Thread- Sicherheit ohne Aufwand für die Synchronisation gewährleistet. contentbroadcaster im Beispiel leitet die Nachricht einfach weiter, ohne sie zu klonen, weil sie vom Typ String ist und damit unveränderlich. Der ActionBlock imageprocessor kopiert Bilder aus dem Web auf den lokalen PC. Dabei nutzt er mit Stream.CopyToAsync() eine der neuen asynchronen I/O-Methoden, die nach dem Task-basierten asynchronen Entwurfsmuster [1] realisiert sind. Das Abbrechen des Crawlers ist mittels eines CancellationToken realisiert, das an alle Blöcke übergeben wird. Nun soll es dem Leser überlassen bleiben, darüber zu grübeln, warum es auch noch einen BroadcastBlock linkbroadcaster gibt und wie sich der Web Crawler, nachdem er alle Seiten durchforstet hat, mittels IDataflowBlock.Complete() und DataflowLinkOptions.Propagate Completion selbst beenden könnte. Der dotnetpro- Beitrag Unter Beobachtung erklärt und liefert einen kompletten Dateiprozessor als Windows-Dienst, der unter anderem BufferBlocks verwendet [3]. TPL Dataflow wird nicht automatisch mit dem.net Framework 4.5 installiert, sondern muss in Visual Studio mit NuGet nachinstalliert werden. Wie beim Managed Extensibility Framework (MEF) verspricht Microsoft, durch die Abkoppelung vom Versionszyklus von Visual Studio und.net, schneller neue Funktionen bereitstellen zu können. Datenstrukturen für parallele Verarbeitung Seit.NET 4 gibt es einige Klassen, die bei der parallelen Programmierung hilfreich sind. Sie befinden sich im Namensraum System.Collection.Concurrent und bieten Thread-sichere Operationen, um Elemente hinzuzufügen und zu entfernen; dabei vermeiden sie Locks wo irgend möglich oder nutzen feingranulare Locks. Neben garantierter Robustheit ermöglichen sie eine deutlich bessere Performanz als eigene Locks um Standardauflistungen wie List. Diese Klassen sind: [Abb. 2] Windows Task-Manager und Ressourcenmonitor. BlockingCollection ConcurrentBag ConcurrentDictionary ConcurrentQueue ConcurrentStack Die mit.net 4.x neu eingeführten Synchronisierungs-Primitiven [11] helfen bei der Koordination feingranularer paralleler Verarbeitung und verbessern deren Performanz gegenüber den älteren Vertretern wie ManualResetEvent. Barrier CountdownEvent ManualResetEventSlim SemaphoreSlim SpinLock SpinWait Mit sogenannter Lazy-Initialisierung wird der Speicher für ein Objekt erst dann bereitgestellt, wenn er benötigt wird. Mit den auf diese Weise initialisierenden Klassen lassen sich Startzeiten verkürzen und die Performanz verbessern, weil die Allokierung über die Zeit verteilt wird. Diese Klassen sind: Lazy (Of T) ThreadLocal (Of T) LazyInitializer Diagnosewerkzeuge Mit der Registerkarte Leistung des Windows Task-Managers und dem von dort aus erreichbaren Ressourcenmonitor können Sie den Ressourcenverbrauch von Prozessen beobachten, wie in Abbildung 2 zu sehen ist. Zusätzlich lässt sich die Spalte Threads einblenden. Mit Windows 8 zeigt sich der Task-Manager deutlich übersichtlicher gestaltet. Auch der bewährte Process Explorer von Mark Russinovich ist hilfreich. Visual Studio 2012 bietet einige Merkmale, die bei der Analyse paralleler Lösungen hilfreich sind: das Fenster Parallel Stacks das Fenster Parallel Tasks den Concurrency Visualizer Die Windows-Parallel-Stacks und -Tasks lassen sich in Visual Studio über Debug Windows anzeigen, siehe Abbildung 3. Den Concurrency Visualizer starten Sie in der IDE über Analyze Concurrency (Abbildung 4). Mit der Klasse StopWatch sind Zeitmessungen möglich. Beim Debuggen paralleler Programme kann das Werkzeug CHESS von Microsoft Research helfen. CHESS dient zum Auffinden und Reproduzieren sogenannter Heisen-Bugs [4]. Wann und wie parallelisieren? Die Erfahrung zeigt, dass Annahmen zur Performanz häufig falsch sind. Die Parallelisierung seriellen Codes sollten Sie nur angehen, wenn wesentliche parallelisierbare Engpässe identifiziert sind. Alle Entwurfs- und Implementierungsalterna

6 tiven sollten durch frühzeitige und begleitende Tests und Messungen immer wieder abgesichert werden. Bei allem Hype um parallele Programmierung sollten die Einfachheit und andere Vorteile serieller Verarbeitung nicht aus dem Blick geraten. Manche Probleme [Abb. 3] Die Visual-Studio-Fenster Parallel Task und Stack. [Abb. 4] Der Concurrency Visualizer der IDE. lassen sind nur seriell lösen oder es gibt einfach keine sinnvoll parallelisierbaren Teile. Manche parallelen Lösungen erfordern mehr Koordinationsaufwand zwischen den parallelen Teilen, als durch ihre Parallelisierung zu gewinnen ist. Fehler in parallelem Code sind häufig obskur und lassen sich schwer finden und beheben. Ist die Entscheidung für die Parallelisierung gefallen, empfiehlt es sich, immer den einfachsten Ansatz zu wählen. Dazu wählen Sie den höchsten verfügbaren Abstraktionsgrad, also zum Beispiel Datenflussblöcke statt eigener, auf den Klassen aus Systems.Collections.Concurrent basierender Konstrukte. Threads und Locks sind dabei die letzte Wahl. Oft hilft es, die generelle Architektur einer Anwendung zu überdenken, statt gleich Engpässe in der Performanz zu optimieren. Konkurrierender Zugriff auf Daten aus parallelen Tasks sollte immer minimiert werden. Der größte Gewinn ergibt sich im Allgemeinen durch Parallelisierung auf der obersten Ebene von Algorithmen. Um ein Gefühl für Zeitspannen zu bekommen, in denen sich eigener Code bewegt, stellt Abbildung 5 typische Zeitspannen in einer Übersicht einander gegenüber. Die Angaben beruhen auf naiven Messungen ohne Berücksichtigung von Datenvolumina, gleichzeitiger Last oder Netzwerkbandbreite et cetera (siehe Code zum Artikel). In realen Anwendungen gehen Unterschiede in der Performanz zwischen verschiedenen Ansätzen oft im Aufwand für die eigentliche Verarbeitung unter. Vergleiche hierzu sollten immer unter möglichst realen Bedingungen erfolgen, zum Beispiel mit der entsprechenden Anzahl von Clients, Transaktionsvolumina, Anzahl der Datensätze pro Tabelle, Latenzzeit des Netzwerks, virtuelle oder physische Rechner, Zahl und Leistung der Kerne, Ausstattung mit RAM und so weiter. Zum Experimentieren mit I/O-lastiger und CPU-lastiger Verarbeitung lassen sich I/O-Lasten mit Task.Delay() und CPU- Lasten mit Thread.SpinWait() simulieren. Bibliotheken mit paralleler Verarbeitung sollten auch serielle Versionen ihrer Methoden bereitstellen oder einen optionalen Parameter degreeofparallelism bieten. Intern sollten sie bei degreeofparallelism=1 serielle Verarbeitung verwenden, um den generellen Overhead von Parallel. For*() oder PLINQ zu vermeiden. Verwandte Frameworks Neben den Standardmerkmalen des.net Frameworks gibt es weitere interessante Frameworks und Bibliotheken, die sich Parallelität und Asynchronität widmen: PollTimer ereignisorientierte Ansätze Concurrency and Coordination Runtime (CCR)

7 Parallele Programmierung und Datenfluss mit.net [Abb. 5] Typische Zeitspannen üblicher Operationen. Auch Message Queuing und SQL-Datenbanken bieten ereignisorientierte Verarbeitung. Das Microsoft Message Queuing (MSMQ) oder Oracle Advanced Queuing ermöglichen es, auf Messages zu lauschen. Mit SqlDependency im ADO.NET-Provider für den MS SQL Server oder OracleDependency des entsprechenden Oracle-Providers ist es möglich, auf Änderungen von Daten in der Datenbank zu lauschen. Der Windows Azure AppFabric Service Bus bietet unter anderem eine Verteilung von Ereignissen in der Cloud. SignalR ist ein interessantes ereignisorientiertes asynchrones Signalisierungs- Framework, entwickelt für Webanwendungen wie Aktienticker. Es ermöglicht permanente Verbindungen zwischen Client und Server in ASP.NET, kann aber auch für Rich-Client-Anwendungen genutzt werden. Das Tool bietet Client-Bibliotheken für JavaScript,.NET und auch speziell für Windows Phone. Es lässt sich anstelle von Long-Polling, also dem hängenden Anpollen von Diensten, verwenden. Mit SignalR lassen sich außerdem Methoden im Client mit Ereignissen in SignalR-Webdiensten verbinden, sodass ein Dienst diese auslösen kann. Um das Prinzip zu verstehen, ist das Video zu SignalR auf Channel 9 sehr hilfreichen [13]. Seit 2006 gibt es mit dem Microsoft Robotics Developer Studio die Concurrency and Coordination Runtime (CCR) Library [14]. CCR kann auch außerhalb der Programmierung von Robotern in normalen.net-anwendungen verwendet werden. Vieles aus der CCR findet sich auch im Task-Datenfluss, siehe oben. Microsoft StreamInsight (früher SQL Server Notification Services) ist eine SQL- Server-Komponente, die Datenströme fast in Echtzeit analysieren kann [15]. Mit StreamInsight lassen sich Datenströme überwachen, analysieren und Aktionen auf ihnen auslösen. Es verkraftet Tausende Ereignisse pro Sekunde bei Antwortzeiten von unter einer Sekunde. Es gibt einige.net-bibliotheken für die parallele Programmierung mit der immensen Rechenleistung von Mehrkern- Prozessoren auf Grafikkarten (GPU), sogenanntes General-Purpose Computing on Graphics Processing Units (GPGPU), zum Beispiel: Microsoft Accelerator [16] Brahma [17] CUDA.NET [18] SQL Server StreamInsight Bibliotheken zum Rechnen auf Grafikkarten (GPGPU) C++ Concurrency Runtime Windows Workflow Foundation (WF) Der erste Artikel zum Thema [4] hat unter den asynchronen Programmiermodellen auch Timer aufgeführt, denn ihre Callbacks werden ja asynchron in Threadpool-Threads ausgeführt. Eine spezielle Form von Timern sind Poll-Timer. Auf der Homepage LeanWork [12] findet sich ein Poll-Timer, der seinen ersten Tick nicht erst nach dem ersten Verstreichen seines Intervalls auslöst, sondern sofort und dessen Ticks nicht in die laufende Verarbeitung hineinfeuern, falls die Verarbeitung länger dauert als sein Intervall. Eine Alternative zum Pollen mit Timern ist die Verwendung von Ereignissen. Ein Beispiel ist das Lauschen auf neue Dateien in einem Verzeichnis oder einem Verzeichnisbaum mittels FilesystemWatcher- Ereignissen. CUDA.NET ermöglicht die Verwendung des proprietären Frameworks CUDA von Nvidia in.net; Microsoft Accelerator unterstützt mittels DirectX alle modernen GPUs, aber auch mehrkernige CPUs; Brahma ist eine Open-Source-Bibliothek für das parallele Verarbeiten von Streams auf GPUs mittels LINQ. Die C++ Concurrency Runtime bietet für C++ alles, was die Task Parallel Library für das.net Framework bietet: Tasks, Loops und Actors. Mit der Windows Workflow Foundation (WF) lassen sich Arbeitsabläufe beschreiben und ausführen. Mittels Code oder Diagrammen werden die Abläufe definiert und dann von der WF-Laufzeitumgebung ausgeführt. Die Workflow Foundation bietet zudem einen für Endanwender geeigneten grafischen Designer, der sich auch in eigene Anwendungen einbinden lässt. Die Betrachtungen in dieser Artikelserie beschränkten sich auf parallele Verarbeitung mit einem Mehrkernrechner. Der Artikel Horizontal Scalability for Parallel Execution of Tasks [19] beschreibt einen

8 Ansatz, parallele Verarbeitung über mehrere Rechner zu verteilen. Fazit Der erste Teil dieser Artikelserie [1] hat gezeigt, wie einfach feingranulare Asynchronität und Parallelität mit Task und Await zu realisieren sind. Zur Vorsicht sei auf die besonderen Komplikationen bei der Fehlerbehandlung hingewiesen [4]. Mit Parallel.For*() und.invoke() bietet.net mächtige Funktionen zur parallelen Programmierung; PLINQ bringt Eleganz ins Spiel; die Datenflussmerkmale helfen, komplexe asynchrone Datenflüsse übersichtlich und effizient zu gestalten. Mit diesen mächtigen Merkmalen von.net ist es deutlich einfacher geworden, typische Qualitätsanforderungen an Reaktivität, Durchsatz, Leistungsverhalten, Skalierbarkeit, Wartbarkeit, Robustheit und Korrektheit zu erfüllen. Es ist eine Freude, damit zu entwerfen und zu programmieren. Versuchen Sie es doch mal! [jp] [1] Peter Meinl, Thread is Dead! Überblick über asynchrone und parallele Verarbeitung mit.net, dotnetpro 5/2013, Seite 132 ff., [2] MSDN, Datenfluss (Task Parallel Library), [3] Peter Meinl, Unter Beobachtung, Dateien per Multithreading und MEF verarbeiten, dotnetpro 4/2013, Seite 128 ff., [4] Peter Meinl, Lass da mal was sein, Saubere und robuste Fehlerbehandlung in.net-anwendungen, 3/2013, Seite 132 ff., [5] Pamela Vagata, When Should I Use Parallel. ForEach? When Should I Use PLINQ?, [6] Joseph Albahari, Code Listings zu C# in a Nutshell, SL1306AsyncParallel3 [7] Stephen Toub, Introduction to TPL Dataflow, [8] Michael Scheffler, Schneller durch die Warteschlange, Große Datenmengen richtig parallel verarbeiten, dotnetpro 9/2012, Seite 54 ff., [9] Html Agility Pack, [10] Reactive Extensions, [11] MSDN, Übersicht über Synchronisierungsprimitiven, SL1306AsyncParallel6 [12] LeanWork, FileWatcher, FilePoller Components, SL1306AsyncParallel7 [13] Channel 9, SignalR, [14] MSDN, CCR Introduction, [15] SQL Server StreamInsight, [16] Microsoft Accelerator, [17] Brahma, [18] Nvidia CUDA, [19] Jesus Aguilar, Horizontal Scalability for Parallel Execution of Tasks, MSDN Magazine 10/2012, [20] Custom Partitioners for PLINQ and TPL, [21] Adam Freeman, Pro.NET 4 Parallel Programming in C#, ISBN 10: codekicker.de Die deutschsprachige Q&A-Plattform für Software-Entwickler codekicker.de Antworten für Entwickler

9 Multithreading. 1 Idee des Multithreading

9 Multithreading. 1 Idee des Multithreading 9 Multithreading Jörn Loviscach Versionsstand: 21. Juli 2015, 11:50 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This work is licensed

Mehr

Die Java Stream API. Funktionale Programmierung mit der Stream API des JDK 1.8. Prof. Dr. Nikolaus Wulff

Die Java Stream API. Funktionale Programmierung mit der Stream API des JDK 1.8. Prof. Dr. Nikolaus Wulff Die Java Stream API Funktionale Programmierung mit der Stream API des JDK 1.8 Prof. Dr. Nikolaus Wulff Funktionale Programmierung Neben der Collection API mit default Methoden ist als weitere Neuerung

Mehr

Entwicklung der Programmiersprache C#

Entwicklung der Programmiersprache C# Language Day HDM 2015 Entwicklung der Programmiersprache C# Referent: Mikhail Orleanskiy, IT-Designers GmbH (orleanskiy@it-designers.de) Stand: 6. November 2015 Eine Präsentation der IT-Designers Gruppe

Mehr

Übersicht. Nebenläufige Programmierung. Praxis und Semantik. Einleitung. Sequentielle und nebenläufige Programmierung. Warum ist. interessant?

Übersicht. Nebenläufige Programmierung. Praxis und Semantik. Einleitung. Sequentielle und nebenläufige Programmierung. Warum ist. interessant? Übersicht Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Einleitung 1 2 der nebenläufigen Programmierung WS 2011/12 Stand der Folien: 18. Oktober 2011 1 TIDS

Mehr

Inhaltsverzeichnis. Vorwort... 9

Inhaltsverzeichnis. Vorwort... 9 Inhaltsverzeichnis Vorwort... 9 Einleitung... 11 Für wen ist dieses Buch gedacht... 12 Für wen ist dieses Buch nicht gedacht... 12 Vorkenntnisse... 12 Aufbau dieses Buchs... 13 Der ideale Einstiegspunkt

Mehr

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 7: Prozesse und Möglichkeiten

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 7: Prozesse und Möglichkeiten C# Programmierung Eine Einführung in das.net Framework C# Programmierung - Tag 7: Prozesse und Möglichkeiten 1/27/2012 1 Di Process-Class Callbacks DirectX Webservices ASP.NET C# 4 Tasks WP 7 Tag 7 Prozesse

Mehr

CONCURRENCY MODELS. Auf der Suche nach dem heiligen Gral der ManyCores Peter Sturm. (c) Peter Sturm, Universität Trier

CONCURRENCY MODELS. Auf der Suche nach dem heiligen Gral der ManyCores Peter Sturm. (c) Peter Sturm, Universität Trier CONCURRENCY MODELS Auf der Suche nach dem heiligen Gral der ManyCores Peter Sturm 1 AUTOVERKEHR 61.5 Millionen zugelassene Autos (Anfang 2014) Quelle: Statistisches Bundesamt 2 3 SPERRGRANULAT Die Zeit

Mehr

Skalierbare Webanwendungen mit Python und Google App Engine

Skalierbare Webanwendungen mit Python und Google App Engine Skalierbare Webanwendungen mit Python und Google App Engine Oliver Albers 03. Juli 2008 1/32 Einführung Worum geht es? Pro und Contra Technik Genereller Aufbau Anwendungskonfiguration Verarbeitung von

Mehr

Visual Studio 2012 Windows 8 und.net 4.5. Hans Peter Bornhauser, Noser Engineering AG Fachbereichsleiter.NET, Digicomp AG

Visual Studio 2012 Windows 8 und.net 4.5. Hans Peter Bornhauser, Noser Engineering AG Fachbereichsleiter.NET, Digicomp AG 1 Visual Studio 2012 Windows 8 und.net 4.5 Hans Peter Bornhauser, Noser Engineering AG Fachbereichsleiter.NET, Digicomp AG 2 Der Referent: Hans Peter Bornhauser Dipl. Ing ETH Software Architect, Senior

Mehr

Task Parallel Library. Ralf Abramowitsch Vector Informatik GmbH abramowitsch@lehre.dhbw-stuttgart.de

Task Parallel Library. Ralf Abramowitsch Vector Informatik GmbH abramowitsch@lehre.dhbw-stuttgart.de Task Parallel Library Ralf Abramowitsch Vector Informatik GmbH abramowitsch@lehre.dhbw-stuttgart.de Moore s Gesetz: Alle 2 Jahre verdoppelt sich die Leistung von CPUs Quelle: http://de.wikipedia.org/wiki/mooresches_gesetz

Mehr

The app the crashes, before the breakpoint is reached: Code to the event:

The app the crashes, before the breakpoint is reached: Code to the event: I have set a breakpoint in an asyc event-handler to ListView.ItenTapped-Event (see screenshot below): I then tap on an ListView-entry on my iphone 5 The app the crashes, before the breakpoint is reached:

Mehr

Thomas Claudius Huber. Asynchrone Programmierung mit C#

Thomas Claudius Huber. Asynchrone Programmierung mit C# Thomas Claudius Huber Asynchrone Programmierung mit C# Thomas Claudius Huber Principal Consultant @ Trivadis AG Trainer, Coach, Developer, Architect www.thomasclaudiushuber.com Spezialisiert auf WPF, XAML,

Mehr

Persönlichkeiten bei bluehands

Persönlichkeiten bei bluehands Persönlichkeiten bei Technologien bei Skalierbare Anwendungen mit Windows Azure GmbH & co.mmunication KG am@.de; posts..de/am 1 2 3 4 5 6 7 8 9 Immer mehr Mehr Performance Mehr Menge Mehr Verfügbarkeit

Mehr

ALM mit Visual Studio Online. Philip Gossweiler Noser Engineering AG

ALM mit Visual Studio Online. Philip Gossweiler Noser Engineering AG ALM mit Visual Studio Online Philip Gossweiler Noser Engineering AG Was ist Visual Studio Online? Visual Studio Online hiess bis November 2013 Team Foundation Service Kernstück von Visual Studio Online

Mehr

Softwareentwicklung in der industriellen Praxis

Softwareentwicklung in der industriellen Praxis Softwareentwicklung in der industriellen Praxis Cloud-Systeme: Besonderheiten bei Programmierung und Betrieb Steffen Gemkow / Paul Fritsche - ObjectFab GmbH 26.11.2012 Simple is beautiful Don t repeat

Mehr

Dokumentation zur Anlage eines JDBC Senders

Dokumentation zur Anlage eines JDBC Senders Dokumentation zur Anlage eines JDBC Senders Mithilfe des JDBC Senders ist es möglich auf eine Datenbank zuzugreifen und mit reiner Query Datensätze auszulesen. Diese können anschließend beispielsweise

Mehr

Leistungs- und Geschwindigkeitssteigerung. Dipl.-Ing. Sebastian F. Kleinau Applikationsingenieur

Leistungs- und Geschwindigkeitssteigerung. Dipl.-Ing. Sebastian F. Kleinau Applikationsingenieur Leistungs- und Geschwindigkeitssteigerung von LabVIEW-Projekten Dipl.-Ing. Sebastian F. Kleinau Applikationsingenieur Agenda 1. Einführung 2. Hilfreiche Werkzeuge zur Codeanalyse 3. Benchmarks für LabVIEW-VIs

Mehr

NET.Compact Framework

NET.Compact Framework FRANZIS PROFESSIONAL SERIES Robert Panther Programmieren mit dem NET.Compact Framework Pocket PC - Smartphone - Handheld Mit 178 Abbildungen FRANZIS Vorwort 9 Einleitung 11 1.1 Warum dieses Buch? 11 1.2

Mehr

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Übung 1 mit C# 6.0 MATTHIAS RONCORONI Übung 1 mit C# 6.0 MATTHIAS RONCORONI Inhalt 2 1. Überblick über C# 2. Lösung der Übung 1 3. Code 4. Demo C# allgemein 3 aktuell: C# 6.0 mit.net-framework 4.6: Multiparadigmatisch (Strukturiert, Objektorientiert,

Mehr

Vorwort... 11 Azure Cloud Computing mit Microsoft... 12 Danksagungen... 13 Kontakt zum Autor... 13

Vorwort... 11 Azure Cloud Computing mit Microsoft... 12 Danksagungen... 13 Kontakt zum Autor... 13 Inhaltsverzeichnis Vorwort... 11 Azure Cloud Computing mit Microsoft... 12 Danksagungen... 13 Kontakt zum Autor... 13 Einleitung... 15 Zielgruppe... 16 Aufbau... 16 Inhalt der einzelnen Kapitel... 17 Systemanforderungen...

Mehr

Ich liebe Java && Ich liebe C# Rolf Borst

Ich liebe Java && Ich liebe C# Rolf Borst Ich liebe Java && Ich liebe C# Rolf Borst Java oder C#? Einführung public class Einfuehrung { private int gesamtzahl = 0; /* Ermittelt die Anzahl der geraden und durch drei teilbaren Zahlen */ public String

Mehr

Grundlagen der Parallelisierung

Grundlagen der Parallelisierung Grundlagen der Parallelisierung Philipp Kegel, Sergei Gorlatch AG Parallele und Verteilte Systeme Institut für Informatik Westfälische Wilhelms-Universität Münster 3. Juli 2009 Inhaltsverzeichnis 1 Einführung

Mehr

TYPO3 und TypoScript

TYPO3 und TypoScript TYPO3 und TypoScript Webseiten programmieren, Templates erstellen, Extensions entwickeln von Tobias Hauser, Christian Wenz, Daniel Koch 1. Auflage Hanser München 2005 Verlag C.H. Beck im Internet: www.beck.de

Mehr

Architektur Verteilter Systeme Teil 2: Prozesse und Threads

Architektur Verteilter Systeme Teil 2: Prozesse und Threads Architektur Verteilter Systeme Teil 2: Prozesse und Threads 21.10.15 1 Übersicht Prozess Thread Scheduler Time Sharing 2 Begriff Prozess und Thread I Prozess = Sequentiell ablaufendes Programm Thread =

Mehr

Klaus Rohe Developer Platform & Strategy Group Microsoft Deutschland GmbH klrohe@microsoft.com. Programmierung für Multicore CPUs

Klaus Rohe Developer Platform & Strategy Group Microsoft Deutschland GmbH klrohe@microsoft.com. Programmierung für Multicore CPUs Klaus Rohe Developer Platform & Strategy Group Microsoft Deutschland GmbH klrohe@microsoft.com Programmierung für Multicore CPUs Agenda Einleitung Free Lunch is over Multicore- und Multiprozessor-Architekturen

Mehr

Verwaltung großer Datenmengen auf einem Netzwerklaufwerk. Ein Vergleich zwischen MS-ACCESS und SQLite.

Verwaltung großer Datenmengen auf einem Netzwerklaufwerk. Ein Vergleich zwischen MS-ACCESS und SQLite. Verwaltung großer Datenmengen auf einem Netzwerklaufwerk. Ein Vergleich zwischen MS-ACCESS und SQLite. Was tun, wenn man als Entwickler eine Datenbank einsetzen will, aber keine SQL-Datenbank installieren

Mehr

Oracle 10g und SQL Server 2005 ein Vergleich. Thomas Wächtler 39221

Oracle 10g und SQL Server 2005 ein Vergleich. Thomas Wächtler 39221 Oracle 10g und SQL Server 2005 ein Vergleich Thomas Wächtler 39221 Inhalt 1. Einführung 2. Architektur SQL Server 2005 1. SQLOS 2. Relational Engine 3. Protocol Layer 3. Services 1. Replication 2. Reporting

Mehr

TELEMETRIE EINER ANWENDUNG

TELEMETRIE EINER ANWENDUNG TELEMETRIE EINER ANWENDUNG VISUAL STUDIO APPLICATION INSIGHTS BORIS WEHRLE TELEMETRIE 2 TELEMETRIE WELCHE ZIELE WERDEN VERFOLGT? Erkennen von Zusammenhängen Vorausschauendes Erkennen von Problemen um rechtzeitig

Mehr

Rapid I/O Toolkit. http://projects.spamt.net/riot. Alexander Bernauer alex@copton.net 08.12.08

Rapid I/O Toolkit. http://projects.spamt.net/riot. Alexander Bernauer alex@copton.net 08.12.08 Rapid I/O Toolkit http://projects.spamt.net/riot Alexander Bernauer alex@copton.net 08.12.08 Inhalt Motivation Architektur Beispiel I/O Features Ausblick Motivation Problemstellung Vorgaben Datenverarbeitung

Mehr

Dialekte der Klimaforschung

Dialekte der Klimaforschung Dialekte der Klimaforschung Vom Fortran-Programm zum parallelen Programm Thomas Ludwig Inhalt Welche Dialekte werden transformiert? Welche Anforderungen stellen wir? Wozu diese Transformation? Wie ist

Mehr

SOLISYON GMBH CHRISTIAN WOLF, BENJAMIN WEISSMAN. Optimierung von Abfragen in MS SQL Server DWH-Umgebungen

SOLISYON GMBH CHRISTIAN WOLF, BENJAMIN WEISSMAN. Optimierung von Abfragen in MS SQL Server DWH-Umgebungen WEITER BLICKEN. MEHR ERKENNEN. BESSER ENTSCHEIDEN. Optimierung von Abfragen in MS SQL Server DWH-Umgebungen SOLISYON GMBH CHRISTIAN WOLF, BENJAMIN WEISSMAN VERSION 1.0 OPTIMIERUNG VON ABFRAGEN IN MS SQL

Mehr

XVSM Application Space

XVSM Application Space XVSM Application Space Concurrency & Coordination Runtime DI Thomas Scheller TU Wien, Institut für Computersprachen A 1040 Wien, Argentinierstrasse 8 / 4.Stock Email: ts@complang.tuwien.ac.at Übersicht

Mehr

Anleitung für zwei C++ - Openmp - Beispiele auf der NWZSuperdome

Anleitung für zwei C++ - Openmp - Beispiele auf der NWZSuperdome Anleitung für zwei C++ - Openmp - Beispiele auf der NWZSuperdome (Timo Heinrich, t_hein03@uni-muenster.de) Inhaltsverzeichnis: 0.Einleitung 1.Teil: Helloworldprogramm 1.1 Quellcode: Helloworld.cpp 1.2

Mehr

Whitepaper. Produkt: combit List & Label 16. List & Label Windows Azure. combit GmbH Untere Laube 30 78462 Konstanz

Whitepaper. Produkt: combit List & Label 16. List & Label Windows Azure. combit GmbH Untere Laube 30 78462 Konstanz combit GmbH Untere Laube 30 78462 Konstanz Whitepaper Produkt: combit List & Label 16 List & Label Windows Azure List & Label Windows Azure - 2 - Inhalt Softwarevoraussetzungen 3 Schritt 1: Neues Projekt

Mehr

WIE KANN ICH ACCESS XML FÄHIGKEITEN UNABHÄNGIG VON DER VERSION BEIBRINGEN?

WIE KANN ICH ACCESS XML FÄHIGKEITEN UNABHÄNGIG VON DER VERSION BEIBRINGEN? XML 1 WIE KANN ICH ACCESS XML FÄHIGKEITEN UNABHÄNGIG VON DER VERSION BEIBRINGEN? Mit den verschiedenen Versionen von Access wurde die Unterstützung von XML immer mehr verbessert. Vollständig ist sie aber

Mehr

OpenCL Implementierung von OpenCV Funktionen

OpenCL Implementierung von OpenCV Funktionen Multi-Core Architectures and Programming OpenCL Implementierung von OpenCV Funktionen julian.mueller@e-technik.stud.uni-erlangen.de Hardware/Software Co-Design August 18, 2011 1 Table of content 1 OpenCL

Mehr

8a. Exkurs.NET. 8a.1.NET Architektur

8a. Exkurs.NET. 8a.1.NET Architektur 8a. Exkurs.NET Inhalt: 8a.1.NET Architektur 8a.2 Kooperation von Anwendungen über ADO -.NET 8a.3 Unterschiede gegenüber gewöhnlicher WIN32- Programmierung 1 8a.1.NET Architektur Bislang wurden die C/C++

Mehr

Zeiterfassung-Konnektor Handbuch

Zeiterfassung-Konnektor Handbuch Zeiterfassung-Konnektor Handbuch Inhalt In diesem Handbuch werden Sie den Konnektor kennen sowie verstehen lernen. Es wird beschrieben wie Sie den Konnektor einstellen und wie das System funktioniert,

Mehr

Nebenläufige Programmierung

Nebenläufige Programmierung Nebenläufige Programmierung Perspektiven der Informatik 27. Januar 2003 Gert Smolka Telefon-Szenario Eine Telefonzelle Mehrere Personen wollen telefonieren Immer nur eine Person kann telefonieren Ressource

Mehr

Komplexe Excel-Berichte mit APEX und jxls erstellen

Komplexe Excel-Berichte mit APEX und jxls erstellen Komplexe Excel-Berichte mit APEX und jxls erstellen Dietmar Aust Opal-Consulting Köln Schlüsselworte: Oracle APEX, MS Excel, jxls, Bericht, Template, Open Source Einleitung In fast jeder Webapplikation

Mehr

Der konsequente Verzicht auf alles Unnötige verhindert Komplexität, den wohl größten Kostentreiber im Unternehmen. (Peter May, Lernen von den

Der konsequente Verzicht auf alles Unnötige verhindert Komplexität, den wohl größten Kostentreiber im Unternehmen. (Peter May, Lernen von den Der konsequente Verzicht auf alles Unnötige verhindert Komplexität, den wohl größten Kostentreiber im Unternehmen. (Peter May, Lernen von den Champions) eevolution Exchange Connector email-synchronisation

Mehr

Windows Azure für Java Architekten. Holger Sirtl Microsoft Deutschland GmbH

Windows Azure für Java Architekten. Holger Sirtl Microsoft Deutschland GmbH Windows Azure für Java Architekten Holger Sirtl Microsoft Deutschland GmbH Agenda Schichten des Cloud Computings Überblick über die Windows Azure Platform Einsatzmöglichkeiten für Java-Architekten Ausführung

Mehr

Skalierbarkeit von Serversystemen Was tun, damit das technische Korsett mein Business nicht einschnürt?

Skalierbarkeit von Serversystemen Was tun, damit das technische Korsett mein Business nicht einschnürt? Skalierbarkeit von Serversystemen Was tun, damit das technische Korsett mein Business nicht einschnürt? Dipl.-Inform. Thomas Witzenrath 21.01.2014 Tralios IT GmbH www.tralios.de Über mich Dipl.-Inform.

Mehr

Dipl. Inf. Eric Winter. PostgreSQLals HugeData Storage Ein Erfahrungsbericht

Dipl. Inf. Eric Winter. PostgreSQLals HugeData Storage Ein Erfahrungsbericht Dipl. Inf. Eric Winter Entwicklungsleiter PTC GPS-Services GmbH PostgreSQLals HugeData Storage Ein Erfahrungsbericht Inhalt 1. Problembeschreibung 2. Partielle Indexierung 3. Partitionierung 1. Vererbung

Mehr

SemTalk Services. SemTalk UserMeeting 29.10.2010

SemTalk Services. SemTalk UserMeeting 29.10.2010 SemTalk Services SemTalk UserMeeting 29.10.2010 Problemstellung Immer mehr Anwender nutzen SemTalk in Verbindung mit SharePoint Mehr Visio Dokumente Viele Dokumente mit jeweils wenigen Seiten, aber starker

Mehr

LabVIEW Power Programming. Amadeo Vergés www.zuehlke.com

LabVIEW Power Programming. Amadeo Vergés www.zuehlke.com LabVIEW Power Programming Aus der Praxis für die Praxis Amadeo Vergés www.zuehlke.com LabVIEW Power Programming Aus der Praxis für die Praxis the same procedure as every year? Running gags in der LabVIEW

Mehr

MySQL Queries on "Nmap Results"

MySQL Queries on Nmap Results MySQL Queries on "Nmap Results" SQL Abfragen auf Nmap Ergebnisse Ivan Bütler 31. August 2009 Wer den Portscanner "NMAP" häufig benutzt weiss, dass die Auswertung von grossen Scans mit vielen C- oder sogar

Mehr

Windows Server Update Services (WSUS)

Windows Server Update Services (WSUS) Windows Server Update Services (WSUS) Netzwerkfortbildung, Autor, Datum 1 WSUS in der Windows Was ist WSUS? Patch- und Updatesoftware von Microsoft, bestehend aus einer Server- und einer Clientkomponente

Mehr

5.1 Bestehende Projekte bearbeiten 79 5.2 Neue Projekte erstellen 85

5.1 Bestehende Projekte bearbeiten 79 5.2 Neue Projekte erstellen 85 Projekte per DOM bearbeiten KAPITEL 5 5.1 Bestehende Projekte bearbeiten 79 5.2 Neue Projekte erstellen 85 Bisher haben wir uns angesehen, wie List & Label mit Ihren Daten bekannt gemacht werden kann und

Mehr

Grundlagen der Informatik 2

Grundlagen der Informatik 2 Grundlagen der Informatik 2 Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm Hochschule Harz FB Automatisierung und Informatik mwilhelm@hs-harz.de Raum 2.202 Tel. 03943 / 659 338 1 Gliederung 1. Einführung

Mehr

Excel beschleunigen mit dem mit Windows HPC Server 2008 R2

Excel beschleunigen mit dem mit Windows HPC Server 2008 R2 Excel beschleunigen mit dem mit Windows HPC Server 2008 R2 Steffen Krause Technical Evangelist Microsoft Deutschland GmbH http://blogs.technet.com/steffenk Haftungsausschluss Microsoft kann für die Richtigkeit

Mehr

Message Oriented Middleware am Beispiel von XMLBlaster

Message Oriented Middleware am Beispiel von XMLBlaster Message Oriented Middleware am Beispiel von XMLBlaster Vortrag im Seminar XML und intelligente Systeme an der Universität Bielefeld WS 2005/2006 Vortragender: Frederic Siepmann fsiepman@techfak.uni bielefeld.de

Mehr

VBA-Programmierung: Zusammenfassung

VBA-Programmierung: Zusammenfassung VBA-Programmierung: Zusammenfassung Programmiersprachen (Definition, Einordnung VBA) Softwareentwicklung-Phasen: 1. Spezifikation 2. Entwurf 3. Implementierung Datentypen (einfach, zusammengesetzt) Programmablaufsteuerung

Mehr

Webdeployment 2.0 Webanwendungen komfortabel bereitstellen, aus Hoster und Kundensicht.

Webdeployment 2.0 Webanwendungen komfortabel bereitstellen, aus Hoster und Kundensicht. Webdeployment 2.0 Webanwendungen komfortabel bereitstellen, aus Hoster und Kundensicht. Bernhard Frank Web Platform Architect Evangelist bfrank@microsoft.com Was braucht es zu einem Webserver? Webserver

Mehr

Extending tl_member. Andreas Fieger (@fiedschmuc) 2015-10-08

Extending tl_member. Andreas Fieger (@fiedschmuc) 2015-10-08 Extending tl_member Andreas Fieger (@fiedschmuc) 2015-10-08 Übersicht Was wollen wir? Wie könnten wir es erreichen? Aufwand/Folgekosten? Was wollen wir? Felder in der Mitgliederverwaltung hinzufügen (z.b.

Mehr

Einführung in die Cross-Plattform Entwicklung Web Services mit dem Intel XDK

Einführung in die Cross-Plattform Entwicklung Web Services mit dem Intel XDK Einführung in die Cross-Plattform Entwicklung Web Services mit dem Intel XDK Einführung Dieses Hands-on-Lab (HOL) macht den Leser mit dem Intel XDK und dem Zugriff auf Web Services vertraut. Der Web Service

Mehr

Java Batch Der Standard für's Stapeln

Java Batch Der Standard für's Stapeln Java Batch Der Standard für's Stapeln Berlin Expert Days 18.09.2015 Dirk Weil, GEDOPLAN GmbH Dirk Weil GEDOPLAN GmbH, Bielefeld GEDOPLAN IT Consulting Konzeption und Realisierung von IT-Lösungen GEDOPLAN

Mehr

Die Alternative zum Web-Form Modell

Die Alternative zum Web-Form Modell Marc André Zhou Solution Architect www.dev -sky.net www.just -sp.net Die Alternative zum Web-Form Modell dotnet Cologne 03.05.2013 Agenda Web Forms vs. MVC ASP.NET MVC Features Web API ODATA Eine ASP.NET

Mehr

eytron VMS Webanwendung Fehlersuche und -Behebung

eytron VMS Webanwendung Fehlersuche und -Behebung eytron VMS Webanwendung Fehlersuche und -Behebung 2009 ABUS Security-Center GmbH & Co. KG, Alle Rechte vorbehalten Diese Anleitung soll Ihnen Unterstützung für den Fall geben, dass die Webanwendung nach

Mehr

Rembo/mySHN. Version 2.0 Kurzanleitung. das selbstheilende Netzwerk. Stand: 01.05.2006. my selfhealing network

Rembo/mySHN. Version 2.0 Kurzanleitung. das selbstheilende Netzwerk. Stand: 01.05.2006. my selfhealing network Rembo/mySHN Version 2.0 Kurzanleitung das selbstheilende Netzwerk my selfhealing network Stand: 01.05.2006 Postanschrift: SBE network solutions GmbH Edisonstrasse 21 74076 Heilbronn IV Inhalt Kurzanleitung...i

Mehr

Referent Robin Adam, Unit Manager Microsoft Development, Logica Deutschland

Referent Robin Adam, Unit Manager Microsoft Development, Logica Deutschland KURSPROGRAMM - WINDOWS AZURE PLATTFORM EINFÜHRUNG IN DIE MICROSOFT CLOUD COMPUTING PLATTFORM WS 2011 Referent Robin Adam, Unit Manager Microsoft Development, Logica Deutschland 1 MOTIVATION Der Begriff

Mehr

Projektseminar Parallele Programmierung

Projektseminar Parallele Programmierung HTW Dresden WS 2014/2015 Organisatorisches Praktikum, 4 SWS Do. 15:00-18:20 Uhr, Z136c, 2 Doppelstunden o.g. Termin ist als Treffpunkt zu verstehen Labore Z 136c / Z 355 sind Montag und Donnerstag 15:00-18:20

Mehr

Übung: Verwendung von Java-Threads

Übung: Verwendung von Java-Threads Übung: Verwendung von Java-Threads Ziel der Übung: Diese Übung dient dazu, den Umgang mit Threads in der Programmiersprache Java kennenzulernen. Ein einfaches Java-Programm, das Threads nutzt, soll zum

Mehr

BTree.dll - Balancierte und verkettete Bäume. Ecofor. BTree.dll. Realisiert mit Microsoft Visual Studio 16.04.2015 1/9

BTree.dll - Balancierte und verkettete Bäume. Ecofor. BTree.dll. Realisiert mit Microsoft Visual Studio 16.04.2015 1/9 BTree.dll Realisiert mit Microsoft Visual Studio 16.04.2015 1/9 INHALT 1. Allgemein... 3 2. Class BTree1 (balanciert)... 3 3. Class BTree2 (balanciert und verkettet)... 4 4. Beschreibung BTree1 und BTree2...

Mehr

Aufbau einer Testumgebung mit VMware Server

Aufbau einer Testumgebung mit VMware Server Aufbau einer Testumgebung mit VMware Server 1. Download des kostenlosen VMware Servers / Registrierung... 2 2. Installation der Software... 2 2.1 VMware Server Windows client package... 3 3. Einrichten

Mehr

Proseminar Nichtsequentielle Programmiersprachen - alt und neu Einführung

Proseminar Nichtsequentielle Programmiersprachen - alt und neu Einführung Proseminar Nichtsequentielle Programmiersprachen - alt und neu Einführung Peter Löhr Nichtsequentielle Programme Nichtsequentielle Programme (concurrent programs): Prozesse, Threads, Tasks,... sind eigenständige

Mehr

Programmieren. Programmieren. Webseiten aufpeppen. Grafikkarte ausreizen. Coole Sprachen. Kinect am PC. 3D-Programmierung

Programmieren. Programmieren. Webseiten aufpeppen. Grafikkarte ausreizen. Coole Sprachen. Kinect am PC. 3D-Programmierung jquery: E-Book und Video auf DVD DVD Listings: Win-8-App im Eigenbau E-Book: jquery Das JavaScript- Framework für interaktives Design Videotutorial Moderne Webseiten gestalten mit jquery UI Visual Studio

Mehr

Flexibilität im Prozess mit Oracle Business Rules 11g

Flexibilität im Prozess mit Oracle Business Rules 11g Flexibilität im Prozess mit Oracle Business Rules 11g Michael Stapf ORACLE Deutschland GmbH Frankfurt Schlüsselworte: Geschäftsregeln, Business Rules, Rules Engine, BPEL Process Manager, SOA Suite 11g,

Mehr

Integration Services - Dienstarchitektur

Integration Services - Dienstarchitektur Integration Services - Dienstarchitektur Integration Services - Dienstarchitektur Dieser Artikel solle dabei unterstützen, Integration Services in Microsoft SQL Server be sser zu verstehen und damit die

Mehr

Zabbix Performance Tuning

Zabbix Performance Tuning Zabbix Performance Tuning Getting most out of your hardware 1/31 Zabbix Webinar Inhalte des Webinars Übersicht über Zabbix Performance Faktoren Step 1. Identifizieren und Beheben von Problemen Step 2.

Mehr

Game Engine Architecture and Development. Platform Unabhängiger Code Multi Threading in Game Engines Profiling

Game Engine Architecture and Development. Platform Unabhängiger Code Multi Threading in Game Engines Profiling Game Engine Architecture and Development Platform Unabhängiger Code Multi Threading in Game Engines Profiling Folien Die Folien werden auf acagamics.de hochgeladen Das Passwort ist 60fps (ohne ) Rückblick:

Mehr

Notizen. 1 Inhaltsverzeichnis 1 INHALTSVERZEICHNIS... 1 2 EINLEITUNG... 2 3 KONFIGURATIONSEINSTELLUNGEN... 3 4 VERTRAUENSWÜRDIGE SITES HINZUFÜGEN...

Notizen. 1 Inhaltsverzeichnis 1 INHALTSVERZEICHNIS... 1 2 EINLEITUNG... 2 3 KONFIGURATIONSEINSTELLUNGEN... 3 4 VERTRAUENSWÜRDIGE SITES HINZUFÜGEN... Seite1 1 Inhaltsverzeichnis 1 INHALTSVERZEICHNIS... 1 2 EINLEITUNG... 2 3 KONFIGURATIONSEINSTELLUNGEN... 3 3.1 KONFIGURATIOSNEINSTELLUNGEN FÜR INTERNET EXPLORER... 3 3.2 ANZAHL AN GLEICHZEITIGEN DOWNLOADS

Mehr

Microsoft Azure: Ein Überblick für Entwickler. Malte Lantin Technical Evangelist, Developer Experience & Evangelism (DX) Microsoft Deutschland GmbH

Microsoft Azure: Ein Überblick für Entwickler. Malte Lantin Technical Evangelist, Developer Experience & Evangelism (DX) Microsoft Deutschland GmbH Microsoft Azure: Ein Überblick für Entwickler Malte Lantin Technical Evangelist, Developer Experience & Evangelism (DX) Microsoft Deutschland GmbH Moderne Softwareentwicklung Microsoft Azure unterstützt

Mehr

Deutschland 8,50 Österreich 9,80 Schweiz 16,80 sfr. www.dotnet-magazin.de 7.2011. Outlook-Kalender in WPF

Deutschland 8,50 Österreich 9,80 Schweiz 16,80 sfr. www.dotnet-magazin.de 7.2011. Outlook-Kalender in WPF z.net MAGAZIN dot Alle Beispiele und Quellcodes zu den Artikeln dieser Ausgabe Bonus-Video von der BASTA! Spring 2011 Architektur für die Cloud Testversionen TeamPulse Ranorex Automation Framework dotpeek

Mehr

Inhaltsverzeichnis. Teil 1 Node.js... 1

Inhaltsverzeichnis. Teil 1 Node.js... 1 xiii Teil 1 Node.js... 1 1 Was ist Node.js? 3 1.1 Die Zeitalter des Webs................................... 3 1.1.1 1990 bis 2000: Das Web 1.0....................... 3 1.1.2 2000 bis 2010: Das Web 2.0.......................

Mehr

Xojo für FileMaker Entwickler

Xojo für FileMaker Entwickler Ein Blick über den Tellerrand Was ist Xojo? Xojo ist eine Objektorientiertes Entwicklungswerkzeug zum Bau von Crossplattform Lösungen Objektorientierte Programmiersprache Kompiler für native Anwendungen

Mehr

peer-to-peer Dateisystem Synchronisation

peer-to-peer Dateisystem Synchronisation Ziel Realisierungen Coda Ideen Fazit Literatur peer-to-peer Dateisystem Synchronisation Studiendepartment Informatik Hochschule für Angewandte Wissenschaften Hamburg 30. November 2007 Ziel Realisierungen

Mehr

IBM SPSS Modeler Installationsanweisungen (Lizenz für gleichzeitig angemeldete Benutzer)

IBM SPSS Modeler Installationsanweisungen (Lizenz für gleichzeitig angemeldete Benutzer) IBM SPSS Modeler Installationsanweisungen (Lizenz für gleichzeitig angemeldete Benutzer) Inhaltsverzeichnis Installationsanweisungen....... 1 Systemanforderungen........... 1 Installation...............

Mehr

MOC 20486 - Entwicklung von ASP.NET MVC 4 Webapplikationen

MOC 20486 - Entwicklung von ASP.NET MVC 4 Webapplikationen MOC 20486 - Entwicklung von ASP.NET MVC 4 Webapplikationen Kompakt-Intensiv-Training Diese Schulung bereitet Sie optimal auf die MOC-Zertifzierung vor. Zu Beginn der Schulung erhalten Sie einen Überblick

Mehr

I Grundlagen der parallelen Programmierung 1

I Grundlagen der parallelen Programmierung 1 vii I Grundlagen der parallelen Programmierung 1 1 Einführung...... 3 1.1 Paradigmenwechsel in der Softwareentwicklung..... 4 1.2 Anwendungsbereiche...... 5 1.3 Parallelität in der Hardware..... 5 1.3.1

Mehr

5. Programmierschnittstellen für XML

5. Programmierschnittstellen für XML 5. Programmierschnittstellen für Grundlagen Dr. E. Schön FH Erfurt Sommersemester 2015 Seite 135 Programmierschnittstelle Notwendigkeit: Zugriff auf -Daten durch Applikationen wiederverwendbare Schnittstellen

Mehr

Introduction to Azure for Developers MOC 10978

Introduction to Azure for Developers MOC 10978 Introduction to Azure for Developers MOC 10978 In dem MOC Kurs 10978: Introduction to Azure for Developers lernen Sie, wie Sie die Funktionalität einer vorhandenen ASP.NET MVC Applikation so erweitern,

Mehr

Lokale Installation von DotNetNuke 4 ohne IIS

Lokale Installation von DotNetNuke 4 ohne IIS Lokale Installation von DotNetNuke 4 ohne IIS ITM GmbH Wankelstr. 14 70563 Stuttgart http://www.itm-consulting.de Benjamin Hermann hermann@itm-consulting.de 12.12.2006 Agenda Benötigte Komponenten Installation

Mehr

Modulare Programmierung und Bibliotheken

Modulare Programmierung und Bibliotheken Modulare Programmierung und Bibliotheken Proseminar-Vortrag am 24.06.2011 von Ludwig Eisenblätter Ludwig Eisenblätter 1 von 25 Modulare Programmierung und Bibliotheken Inhaltsübersicht Motivation / Einleitung

Mehr

Exception Handling, Tracing und Logging

Exception Handling, Tracing und Logging Exception Handling, Tracing und Logging Proseminar Objektorientiertes Programmieren mit.net und C# Tomas Ladek Institut für Informatik Software & Systems Engineering Agenda Exceptions Allgemeines Implementierung

Mehr

Tutorial: Eigene Module und Extensions entwickeln. Version: 0.1 Autor: Anja Beuth

Tutorial: Eigene Module und Extensions entwickeln. Version: 0.1 Autor: Anja Beuth Tutorial: Eigene Module und Extensions entwickeln Version: 0.1 Autor: Anja Beuth Inhaltsverzeichnis 1 2 2.1 2.2 2.3 2.4 3 4 4.1 4.2 4.3 5 5.1 6 6.1 6.2 Notwendigkeit prüfen... Ein Projekt in Visual Studio

Mehr

ISA Server 2004 - Best Practice Analyzer

ISA Server 2004 - Best Practice Analyzer ISA Server 2004 - Best Practice Analyzer Die Informationen in diesem Artikel beziehen sich auf: Microsoft ISA Server 2004 Seit dem 08.12.2005 steht der Microsoft ISA Server 2004 Best Practice Analyzer

Mehr

PostgreSQL in großen Installationen

PostgreSQL in großen Installationen PostgreSQL in großen Installationen Cybertec Schönig & Schönig GmbH Hans-Jürgen Schönig Wieso PostgreSQL? - Die fortschrittlichste Open Source Database - Lizenzpolitik: wirkliche Freiheit - Stabilität,

Mehr

Microsoft Office SharePoint Services Workflow Limitierungen

Microsoft Office SharePoint Services Workflow Limitierungen Microsoft Office SharePoint Services Workflow Limitierungen Dorner Stefan, namics AG April 2007 Inhaltsverzeichnis Allgemeines... 3 Workflow Foundation Thread Pool-Modelle... 5 DefaultWorkflowSchedulerService...

Mehr

OLAP und der MS SQL Server

OLAP und der MS SQL Server OLAP und der MS SQL Server OLAP und der MS SQL Server OLAP-Systeme werden wie umfangreiche Berichtssysteme heute nicht mehr von Grund auf neu entwickelt. Stattdessen konzentriert man sich auf die individuellen

Mehr

Starthilfe für C# Inhaltsverzeichnis. Medien- und Kommunikationsinformatik (B.Sc.) Alexander Paharukov. Informatik 3 Praktikum

Starthilfe für C# Inhaltsverzeichnis. Medien- und Kommunikationsinformatik (B.Sc.) Alexander Paharukov. Informatik 3 Praktikum Starthilfe für C# Inhaltsverzeichnis Allgemeines... 2 Bezugsquellen... 2 SharpDevelop... 2.NET Runtime... 2.NET SDK... 2 Installation... 2 Reihenfolge... 2 Vorschlag für eine Ordnerstruktur... 3 Arbeit

Mehr

LOAD TESTING 95% BRAUCHEN ES, 5 % MACHEN ES: LOAD TESTING MIT VS LEICHTGEMACHT NICO ORSCHEL MVP VS ALM, CONSULTANT

LOAD TESTING 95% BRAUCHEN ES, 5 % MACHEN ES: LOAD TESTING MIT VS LEICHTGEMACHT NICO ORSCHEL MVP VS ALM, CONSULTANT LOAD TESTING 95% BRAUCHEN ES, 5 % MACHEN ES: LOAD TESTING MIT VS LEICHTGEMACHT NICO ORSCHEL MVP VS ALM, CONSULTANT AIT GmbH & Co. KG Ihre Software effizienter entwickelt. ÜBERSICHT GRÜNDE UND ZEITPUNKT

Mehr

whitepaper CLOUD-ENTWICKLUNG: BESTE METHODEN UND SUPPORT-ANWENDUNGEN

whitepaper CLOUD-ENTWICKLUNG: BESTE METHODEN UND SUPPORT-ANWENDUNGEN whitepaper CLOUD-ENTWICKLUNG: BESTE METHODEN UND SUPPORT-ANWENDUNGEN CLOUD-ENTWICKLUNG: BESTE METHODEN 1 Cloud-basierte Lösungen sind auf dem IT-Markt immer weiter verbreitet und werden von immer mehr

Mehr

Einführung in das Microsoft.NET-Framework. Programmiersprache C# 02: Visual Studio / Hello World. Boris Hülsmann

Einführung in das Microsoft.NET-Framework. Programmiersprache C# 02: Visual Studio / Hello World. Boris Hülsmann Einführung in das Microsoft.NET-Framework Programmiersprache C# 02: Visual Studio / Hello World Boris Hülsmann 23.09.2010 1 In dieser Einführung bekommen Sie einen kurzen Einstieg in das.net-framework

Mehr

Verteilte Datenbanken

Verteilte Datenbanken Verteilte Datenbanken André Minhorst, Duisburg Kleinere Datenbankanwendungen mit wenigen Inhalt Benutzern und nicht allzu großem Datenverkehr 1 Gründe für verteilte Anwendungen... 1 können auch im Netzwerk

Mehr

Performanceanalyse der Artikeldarstellung

Performanceanalyse der Artikeldarstellung PhPepperShop - Performanceanalyse José Fontanil und Reto Glanzmann Performanceanalyse der Artikeldarstellung José Fontanil / Reto Glanzmann Januar 2003 Performanceanalyse Artikel anzeigen im PhPepperShop.sxw

Mehr

.NET-Networking 2 Windows Communication Foundation

.NET-Networking 2 Windows Communication Foundation .NET-Networking 2 Windows Communication Foundation Proseminar Objektorientiertes Programmieren mit.net und C# Fabian Raab Institut für Informatik Software & Systems Engineering Agenda Grundproblem Bestandteile

Mehr