Förbättra prestanda för applikation

Relevanta dokument
Arbeta med databas. Översikt. Lektion 1: Arbeta med Entity Data Models. Arbeta med Entity Data Models. LINQ (Language Integrated Query).

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

threads threadpools Timers Asynkrona metoder parallell exekvering av loopar

1.1 Runnable och Thread

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Trådar. Aktiva objekt

Objektorienterad Programkonstruktion. Föreläsning dec 2015

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Förstå grunderna i LINQ. Mål med lektionen!

Outline. Datorsystemtekni. Kravspecifikation. Kravspecifikation (forts.)

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Windows Forms Winstrand Development

DAT043 - föreläsning 8

Repetition av OOP- och Javabegrepp

Föreläsning 15: Parallella subrutiner. Parallellitet. Varför parallella underprogram?

Föreläsnings 9 - Exceptions, I/O

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Repetition av OOP- och Javabegrepp

Att skriva till och läsa från terminalfönstret

Kopiering av objekt i Java

Parallellism, återblick

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Föreläsning 11 Aktiva objekt och trådar, strömmar, kommunikation DAT043,

Exceptions (undantag) Murach s: kap 7

Tentamen ID1004 Objektorienterad programmering May 29, 2012

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Webbtjänster med API er

DAT043 - Föreläsning 7

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Classes och Interfaces, Objects och References, Initialization

Polymorfi. Objektorienterad och komponentbaserad programmering

Länkade strukturer. (del 2)

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Programmering B med Visual C

Inledande programmering med C# (1DV402) Tärningarna ska kastas

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Föreläsning 3. Stack

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Mål med lektionen! Repetera och befästa kunskaperna.

Arrayer (fält)

DAT043 Objektorienterad Programmering

Generic type declarations. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Webbtjänster med API er

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

ÖVERVAKNING AV SQL SERVER

Webbtjänster med API er

Sammansatta datatyper Generics: Parametrisk polymorfism

Subtyping och variance. Objekt-orienterad programmering och design Alex Gerdes, 2018

International Olympiad in Informatics July 2011, Pattaya City, Thailand Tävlingsuppgifter Dag 2 Svenska 1.3. Papegojor

Diagnostiskt Prov. Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas.

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

Klassen javax.swing.timer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Delegater, events och lambdauttryck

TDDC77 Objektorienterad Programmering

Arrayer (vektorer) Murach s: kap Elektronikcentrum i Svängsta AB

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

F4. programmeringsteknik och Matlab

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

Objektorienterad programmering

Objektorienterad Programmering DAT043. Föreläsning 4 23/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Objektorienterad Programkonstruktion. Föreläsning jan 2016

Gissa det hemliga talet

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

C++ Objektorientering - Klasser. Eric Elfving

Föreläsning 15: Repetition DVGA02

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

TDDC77 Objektorienterad Programmering

Objektorienterad Programmering (TDDC77)

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Föreläsning 3. Stack

OOP Objekt-orienterad programmering

Länkade strukturer, parametriserade typer och undantag

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap

Objektorienterad Programkonstruktion. Föreläsning 11 6 dec 2016

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

12 Metaprogrammering i Java

Övningen vill visa på vikten av valet av datastruktur, trots att de ofta erbjuder samma funktionalitet genom sina gränssnitt.

Frekvenstabell över tärningskast med C#

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

Introduktionsmöte Innehåll

Subtyping, co- och contra-variance. Objekt-orienterad programmering och design Alex Gerdes, 2016

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

Felhantering TDDD78, TDDE30, 729A

Systemvetarutbildningen och dataekonomutbildningen

Klient/server. Översikt. Lektion 1: Webbtekniker från Microsoft. Webbteknik från Microsoft. Klient/server. Designmönster. Utrullning.

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Generisk klass med typparameter Inre klass - ListIterator

ID1004 Laboration 4, November 2012

Objektorienterad programmering med Java, Generics

Transkript:

Förbättra prestanda för applikation Översikt Implementera Multitasking. Utföra operationer asynkront. Synkronisera access till informationen. Lektion 1: Implementera Multitasking Skapa task. Klassen Task. Starta Task. Task.Start, TaskFactory.StartNew. Task.Run. Vänta på Task. Returnera värde från task. Avbryta task som körs länge. Köra tasks parallellt. Länka tasks. Hantera undantag.

Skapa task Typisk består grafisk applikation av kod som körs när händelse uppstår. Dessa händelser svarar på händelser som musklick, flyttar på musen eller öppnar ett fönster. Som standard körs koden i UI thread, tänk på att inte köra långa sekvenser i denna tråd, kan innebär att det grafiska gränssnitt slutar att svara. Att köra allt i en tråd, nyttjar inte kapaciteten i våra dator till fullo. Skapa task (forts.) En tråd en processor core..net Framework inkluderar Task Parallel Library, ett antal klasser som gör det enkelt att distribuerar exekvering över flera trådar eller flera processorer. Arbetsuppgifter som tar längre tid, kan tilldelas separat thread, lämnar UI thread ledigt för respons från användare. Klassen Task Klassen Task är själva hjärtat i Task Parallell Library. Klassen används för att representerar arbetsuppgift och gör det möjligt att utföra flera uppgifter samtidigt, i skilda trådar. Task Parallell Library hanterar thread pool och tilldelar arbetsuppgifter till tråd. Task object kör block av kod, kod specificeras som parameter till constructor.

Klassen Task (forts.) Du kan tillhandahålla kod i en metod och skapa Action delegate för att kapsla in metoden. Task task1 = new Task(new Action(MyMethod)); Alternativt anonymous delegate/anonymous method. Task task2 = new Task(delegate { Console.WriteLine( Task 2 reporting ); }); Klassen Task (forts.) Använda lambda expression (rekommenderas). Task task2 = new Task(() => { Console.WriteLine( Task 2 reporting ); }); => goes to. Kontrollera exekvering av Task Task Parallel Library erbjuder ett antal olika metoder att starta tasks, finns också olika sätt att pausa exekvering av kod, tills en eller flera tasks har körts klart. När programkod startar task, kommer Task Parallel Library tilldela thread till task och även att köra den. Task och program körs i olika threads.

Starta task Att starta task: - Task.Start (instans metod). - Task.Factory.StartNew (statisk metod). - Task.Run (statisk metod). Att vänta på att task skall slutföras: - Task.Wait (instans metod). - Task.WaitAll (statisk metod). - Task.WaitAny (statisk metod). Task.Start, TaskFactory.StartNew Att använda Task.Start: var task1 = new Task( () => Console.WriteLine( Task 1 har körts klart. ) ); task1.start(); Att använda TaskFactory.StartNew: var task3 = Task.Factory.StartNew( () => Console.WriteLine( Task 3 har körts klart. ) ); TaskTest ChildTasks Task.Run Att använda Task.Run: var task4 = Task.Run( () => Console.WriteLine( Task 4 har körts klart. ) );

Vänta på task Ibland vill du pausa exekvering av din programkod tills task har exekverat klar. Klassen erbjuder ett antal metoder för detta: - Om du vill vänta på en task skall slutföras, använd metoden Task.Wait. - Om du vill vänta på att flera task skall slutföras, använd statisk metod Task.WaitAll. - Om du vill vänta på att någon task i en samling av task skall slutföras, använd metoden Task.WaitAny. Task.WaitAll och Task.WaitAny, läggs tasks i en array. Returnera värde från task För att task skall bli effektiva, så måste task kunna returnera värde, ett resultat. Den vanliga Task klassen ger oss inte denna möjlighet, men Task Parallel Library tillhandahåller Task<TResult>, som är en klass av typen generic. När du skapar en instans av Task<TResult>, används type parameter för att specificera typ av resultat som task returnerar. Read-only property Result, används för att hämta värde för att returnera till din programkod. Returnera värde från task -exempel // Skapa och köar task som returnerar veckodag som en sträng. Task<string> task1 = Task.Run<string>( () => DateTime.Now.DayOfWeek.ToString() ); Console.WriteLine(task1.Result) // Om du försöker få tillgång till Result, innan task har slutförs, kommer programkod att vänta tills ett resultat finns att tillgå.

Avbryta task som körs länge Tasks används oftast för att utföra operationer som tar lång tid, utan att blockera UI thread. Ibland vill du ge möjlighet för användare att avbryta detta arbete. I Task Parallell Library används cancellation tokens, för att ge stöd för att kunna avbryta task utan att det får konsekvenser. Avbryta task som körs länge -steg Skicka med cancellation token som ett argument till delegate method. I thread som har skapad task, begär cancellation genom att kalla på metoden Cancel. Kontrollera om cancellation token är avbruten. Returnera eller kasta (throw) undantaget OperationCanceledException. Köra tasks parallellt Task Parallel Library inkluderar statisk klass med namnet Parallel. Klassen tillhandahåller ett antal metoder som du kan använda för att köra tasks simultant. Om du vill köra ett antal specificerade task parallellt, använder du metoden Parallel.Invoke. Parallel.For för att köra for-loop parallellt. Parallel.ForEach för att köra foreach-loop parallellt. PLINQ kan användas för att köra LINQ-uttryck parallellt.

Länka tasks Task.ContinueWith metoden används för att länka ihop tasks. Nestade task kan användas för att starta oberoende task. Child task kan användas för att skapa task med beroende. NestedTasks_5 Hantera undantag Kalla på Task.Wait för att fånga propagerade undantag. Fånga AggregateException i ett catch block. Hantera property InnerException för att hantera individuella undantag. TaskExceptions Hantera undantag -exempel try { task1.wait(); } catch(aggregateexception ae) { foreach(var inner in ae.innerexceptions) { // Ta hand om undantaget } }

Övning Filer Modul 12 Lektion 1 Lektion 2: Utföra operationer asynkront Introduktion till asynkrona operationer. Använda Dispatcher. Använda async och await. Skapa metoder som väntar. Skapa CallBack metod. Arbeta med APM. Hantera undantag asynkront. Introduktion till asynkrona operationer Asynkrona operationer är operationer som körs i separata threads, thread som initierar en asynkron operation behöver inte vänta på att operationen skall slutföras, för att fortsätta. Asynkrona operationer är tät relaterade till tasks. Nyckelorden async och await används för att köra asynkrona operationer.

Använda Dispatcher I.NET Framework är varje thread associerad med ett Dispatcher objekt. Dispatcher är ansvarig för att underhålla kö med arbetsuppgifter för thread. Dispatcher kan användas i grafisk applikation, för att skicka uppdateringar från bakgrunden till UI. Dispatcher.BeginInvoke. lbltime.dispatcher.begininvoke(new Action(() => SetTime(currentTime))); Dispatcher Använda async och await Lägg till async modifier till deklaration för metod. Använd await inuti async metod för att vänta på att task skall slutföras, utan att blockera thread. private async void btnlongoperation_click(object sender, RoutedEventArgs e) {... Task<string> task1 = Task.Run<string>(() => {... } lblresult.content = await task1; } GetCoffee Skapa metoder som väntar Operator await används alltid för att vänta på att task skall slutföras. Om din synkrona metod returnerar void, asynkrona motsvarigheten kommer att returnera Task. Om din synkrona metod returnerar T som typ, asynkrona motsvarigheten kommer att vara Task<T>.

Skapa CallBack metod När asynkron metod är klar, kan denna metod kalla på callback method. Den asynkrona metoden skickar informationen till callback method, där informationen kommer att bearbetas. Metoden används också när ett UI skall uppdateras. Arbeta med APM Många.NET Framework klasser implementerar asynkrona operationer efter designmönstret APM. Detta designmönster implementeras som två metoder, BeginNamn_på_operation och EndNamn_på_operation. Klassen HttpWebRequest inkluderar metoder med namnen BeginGetResponse och EndGetResponse. Hantera undantag asynkront När nyckelorden async och await används, kan undantag hanteras på samma sätt som de hanteras synkront, dvs med try/catch. Trots att metoder är asynkrona, kommer undantag att rapporteras till program som har kallat på metoden. Bakom detta ligger Task Parallel Library. Awaitable Method Exception LastResort

Övning Filer Modul 12 Lektion 2 Lektion 3: Synkronisera access till informationen Använda Locks. Synchronization Primitives. Concurrent Collections. Använda Locks När multithreading används i din applikation, så kan situationer uppstå där flera threads har tillgång till din resurs, exempelvis för att hålla reda på lagerhållningen. Nyckelordet lock används för att stänga ute andra trådar.

Synchronization Primitives Synchronization Primitives är mekanismer som tillåter dess användare, i detta fallet.net runtime, att kontollera synkroniseringen av trådar. Task Parallel Library stödjer ett stort antal sådana Primitives, som kontrollerar tillgång till resurser på olika sätt. Synchronization Primitives (forts.) Klass ManualResetEventSlim, används för att begränsa tillgång till resurs till ett thread åt gången. Klass SemaphoreSlim, begränsar tillgången till resurser till ett fixerat antal threads. Klass CountDownEvent, begränsar tillgång till resurs, till dess att ett satt värde av tasks har signalerats att vara klara. Klass ReadWriterLockSlim, ger möjlighet till flera threads att läsa resurs, när som helst. Synchronization Primitives (forts.) Klass Barrier, används för att blockera flera threads, tills dess att alla uppfyller ett givet villkor.

Concurrent Collections Standardklasser för samlingar i.net Framework, är som standard, inte thread-safe. När multithreading används är det viktigt att du inte påverkar intigritet för samlingen. En teknik att använda är synchronization primitives, en annan är att använda samlingar som är specifikt designade för multithreading. Finns i System.Collection.Concurrent. Concurrent Collections (forts.) Klass eller interface ConcurrentBab<T> ConcurrentDictionary<T> ConcurrentQueue<T> IProducerConsumerCollection<T> BlockingCollection<T> Beskrivning Klass tillhandahåller ett säkert sätt att lagra oordnad samling av enheter. Klass tillhandahåller ett thread-safe alternativ till Dictionary<TNyckel, Tvärde>-klassen. Klass tillhandahåller ett thread-safe alternativ till Stack<T>-klassen. Interfacet definierar metoder för att implementera klasser som exponerar beteende som producent/konsumerare. Producent lägger till, konsument läser från samling. Klasserna ovan använder interfacet. Klassen fungerar som wrapper för samlingar som implementerar IProducerConsumerCollection<T>. Används exempelvis för att förhindra ett tillägg till samlingen tills utrymme finns tillgängligt. Övning Använda Lock

Repetitionsfrågor