7. Niezależnie dostarczane i rozwijane
• Narzędzie
• Język
• Biblioteki
Aktualizacje
• 0-Day Security – obowiązkowe i wymuszane Windows Update
• Inne – jak sobie życzymy
Dystrybucja
• OS / VS
• „Runtime”
• Nuget – jako główne narzędzie do budowy i dostarczania bibliotek.
• PCL jako (tymczasowe) rozwiązanie i droga do OneLib
• Nie wykluczanie „Nie Windows”
14. CoreClr + CoreFx (.NET Core, obecnie prace nad 1.5)
• dotnet: kompilacja, uruchomienie, instancjonowanie, szablony
ASP.NET Core i okolice
• dnvm – zarządzanie wersjami .NET Core
• dnx – uruchamianie projektów (folderów )
• dnu – kompilacja, odzyskanie pakietów itp
• yo (yoman, z node/npm) – generator projektów
15.
16.
17.
18.
19. Gen1 Gen 0
• Nowe obiekty są alokowane jako generacja 0
• Obiekty z aktywnymi referencjami przetrwają odśmiecenie
• GC scala obiekty do których są referencje
• Obiekty promowane do starszej generacji
Korzeń
Sterta
Niedeterministyczny
Małe obiekty żyją krótko
duże – długo
„Z blokadą”
Serwerowy GC –
asynchroniczny; więcej niż
jeden procesor
Kliencki GC – asynchroniczny
Large Object Heap
GC w tle na serwerze
Gen0/Gen1 może być odśmiecane
podczas odśmiecania Gen2
20. dokumentacja
Mark
Plan
Relocate
Compact
Sweep
1
• Wątek użytkownika przekroczył budżet alokacyjny i zainicjował GC.
2
• GC woła SuspendEE by zawiesić zarządzane wątki.
3
• GC decyduje czy uruchomić GC w tle.
4
• Jeżeli tak, wątki GC są budzone; wołane RestartEE do wznowienia wątków.
5
• Zarządzane wątki kontynuują pracę podczas działania GC w tle.
6
• Jeżeli wątek użytkowy ponownie przekroczy budżet alokacyjny,
GC będzie działał na pierwszym planie) (lub –gdy wyłączymy GC w tle).
7
• GC w tle woła SuspendEE by zakończyć proces zaznaczania (Mark) a potem
woła RestartEE oraz zaczyna fazę sweep.
8
• GC w tle jest zakończone.
Multicore Garbage Collection with Local Heaps
23. float[] values = GetValues();
float increment = GetIncrement();
float[] result = new float[values.Length]
// Perform addition as manual loop:
for (int i = 0; i < values.Length; i++) {
values[i] += increment;
}
Vector<float> values = GetValues();
Vector<float> increment = GetIncrement();
// Perform addition as vector operation:
Vector<float> result = values + increment;
Niezwektoryzowany kod
Dzięki Vector<T>
dodaje się wiele
wartości na raz