dotnetomaniak.pl - Najnowsze artykuły o .NET w dziale Sztuka programowania - Strona 57

W ostatnim poście pisałem o barierze jako rozwiązaniu na uniknięcie problemów z związanych z optymalizacją dokonywaną przez CPU (re-ordering). Kilka postów wcześniej pisałem z kolei o buforowaniu danych i słowie kluczowym volatile. Jeśli nie wiedzie co to jest MemoryBarrier oraz Volatile zachęcam do przeczytania tych wpisów najpierw – bez nich dzisiejszy post będzie kompletnie niezrozumiały. Wiemy, że caching oraz re-ordering może na niektórych architekturach spowodować trudne w analizie błędy. Dziś chc...

Tagi: bariera, C#, lock
Dziel się z innymi:
Piotr Zieliński  » Blokada lock a bariera oraz caching

Sztuka programowania 2645 dni, 8 godzin, 9 minut temu pzielinski 79 źrodło rozwiń

W .NET istnieje metoda Thread.MemoryBarrier(). W użyciu jest bardzo prosta – nie wymaga przekazania żadnych parametrów. Strona teoretyczna jest jednak bardziej skomplikowana. Przed wyjaśnieniem czym jest Memory Barrier w świecie współbieżnym musimy zrozumieć jak wykonywane są instrukcje przez procesor. Załóżmy, że mamy następujące operacje:a = b +1 c = a +1 d = e +1; W jakiej kolejności zostaną wykonane powyższe operacje? Naturalne wydaje się, że procesor wykona je po kolei. Jednak ze względu na różn...

Tagi: C#, MemoryBarrier
Dziel się z innymi:
Piotr Zieliński » Thread.MemoryBarrier–wprowadzenie

Sztuka programowania 2648 dni, 13 godzin, 59 minut temu pzielinski 133 źrodło rozwiń

Dziś trochę dla odmiany, nie będę pisał o wielowątkowości a o jednym z podstawowych słów kluczowych w c#, które na szczęście nie jest bardzo popularne – bazując na moim doświadczeniu z różnymi projektami, rzadko widuje je w kodzie. Global przydaje się gdy mamy konflikty z przestrzeniami nazw. Wyobraźmy sobie, że mamy następujący kod (kod  bazuje na dokumentacji MSDN):class Program { publicclass System { } constint Console =7; staticvoid Main() { } } Następnie chcemy w metodzie Co...

Tagi: C#, global
Dziel się z innymi:
Piotr Zieliński » Słowo kluczowe global

Sztuka programowania 2651 dni, 21 godzin, 47 minut temu pzielinski 242 źrodło rozwiń

Witam kolejna cześć artykułu z cyklu “dobre i złe praktyki w c#”. Zapraszam do lektury: http://msdn.microsoft.com/pl-pl/library/dobre-i-zle-praktyki-w-c-sharp–czesc-2.aspx

Tagi: C#
Dziel się z innymi:
Piotr Zieliński » Dobre i złe praktyki w C# – część II

Sztuka programowania 2654 dni, 19 godzin, 45 minut temu pzielinski 390 źrodło rozwiń

Kiedyś na blogu opisywałem kilka implementacji singleton’a przystosowanych do pracy w środowisku wielowątkowym. Jedna z nich opierała się na tzw. double checked locking:publicsealedclass Singleton { privatestatic Singleton mInstance =null; privatestaticreadonlyobject mSync =newobject(); private Singleton() { } publicstatic Singleton Instance { get { if(m_Instance ==null ) { lock(m_Sync) { i...

Tagi: C#, Singleton
Dziel się z innymi:
Piotr Zieliński » Code review: Wielowątkowy singleton

Sztuka programowania 2657 dni, 9 godzin, 37 minut temu pzielinski 212 źrodło rozwiń

To będzie króciutki wpis, niemniej traktujący o dość istotniej zasadzie programowania obiektowego, tj. zasadzie jednolitego dostępu. Jej treść brzmi następująco: Wszystkie usługi oferowane przez moduł powinny być dostępne za pośrednictwem jednolitej notacji, która nie zdradza, czy zostały one zaimplementowane z wykorzystaniem danych przechowywanych statycznie, czy też obliczanych na bieżąco w razie potrzeby. Jakie są zalety ze stosowania tej zasady? Otóż...

Źródło: paskol.robi.to
Dziel się z innymi:
Me z .NET tete-a-tete » Programowanie jest proste, gdy masz jednolity dostęp

Sztuka programowania 2660 dni, 7 godzin, 15 minut temu PaSkol 195 źrodło rozwiń

Na moim blogu co jakiś czas można znaleźć informacje dotyczące pisania dobrego oraz złego kodu w c#. Oprócz tego zacząłem pisać serie artykułów związanych z tą tematyką. Wiele informacji w tych artykułach można było znaleźć już wcześniej na moim blogu ale myślę, że ten cykl stanowi dobre dopełnienie i podsumowanie tego wszystkiego co piszę tutaj. Oczywiście artykuły rozszerzają tematykę, oraz zawierają więcej przykładów więc tym bardziej zachęcam do lektury. Dziś została opublikowana pierwsza część: ht...

Dziel się z innymi:
Piotr Zieliński » Dobre i złe praktyki w C# – część I

Sztuka programowania 2663 dni, 14 godzin, 44 minuty temu pzielinski 607 źrodło rozwiń

Dodanie animacji w WPF w stylu funkcyjnym.

Dziel się z innymi:
Programowanie funkcyjne w WPF

Sztuka programowania 2665 dni, 8 godzin, 44 minuty temu dit2006 225 źrodło rozwiń

Dziś czas na kolejną metrykę badania kodu  – TypeRank. Wartość metryki jest liczona za pomocą algorytmu Google Page Rank, który jest wykorzystywany przez wyszukiwarki do indeksowania stron. W świecie wyszukiwarek internetowych im większa wartość tym strona znajdzie się wyżej podczas prezentowania wyników. Algorytm bada powiązania między stronami internetowymi. Strona dostaje wyższą ocenę, gdy więcej innych stron wskazuje na nią. Stwierdzono, że skoro do danej strony odwołuje się więcej innych witryn to ...

Tagi: C#, TypeRank
Dziel się z innymi:
Piotr Zieliński » Metryka TypeRank

Sztuka programowania 2666 dni, 15 godzin, 33 minuty temu pzielinski 70 źrodło rozwiń

Dziś trochę o matematycznej walidacji kodu czyli o metrykach.  LCOM (lack  cohesion of methods) umożliwia obliczenie jak bardzo nasze metody są spójne. Do obliczania tej wartości istnieją gotowe narzędzia takie jak nDepend, ale aby w pełni zrozumieć znaczenie metryki obliczymy sami jej wartość dla prostej klasy. Powinno dążyć się do jak największej spójności a tym samym do jak najniższej wartości LCOM. Przed wyjaśnieniem czym jest metryka LCOM wprowadźmy następujące pojęcia: M – zbiór metod danej klasy...

Tagi: C#, Code review
Dziel się z innymi:
Piotr Zieliński » Code review: Badanie spójności kodu

Sztuka programowania 2669 dni, 15 godzin, 22 minuty temu pzielinski 219 źrodło rozwiń

Jak każdemu porządnemu developerowi zdarza mi się czasem napisać testy. Jak każdemu porządnemu developerowi, czasem zdarza mi się wykorzystać mechanizm metod rozszerzających (jeśli nie wiesz o czym mówię sprawdź na msdn). Jak każdy prawdziwy developer, chciałem przetestować logikę, która była wykorzystywana w jednej z takich metod. W zasadzie to nie w samej metodzie, chciałem sprawdzić czy zostanie wywołana z wartościami, które są dla mnie ważne. Zacznę od metod rozszerzających, a testowanie przyjdzie ...

Dziel się z innymi:
jstadnicki: Metody rozszerzające - testowanie i porządek w api.

Sztuka programowania 2672 dni, 21 godzin, 4 minuty temu Paweł Łukasik 207 źrodło rozwiń

W ostatnim poście opisałem atrybut ThreadStatic pozwalający na korzystanie ze statycznych pól w sposób niezależny w każdym wątku. Dziś pora na analogiczną klasę, wprowadzoną w .NET 4.0 – ThreadLocal. Zacznijmy od przykładu:class ClassA { private ThreadLocal

Tagi: C#, ThreadLocal
Dziel się z innymi:
Piotr Zieliński  » Klasa ThreadLocal

Sztuka programowania 2672 dni, 21 godzin, 4 minuty temu pzielinski 65 źrodło rozwiń

W C# istnieje dość mało popularny atrybut ThreadStaticAttribute. Do czego on służy? Zacznijmy od przykładu:internalclass Program { [ThreadStatic] privatestaticint _value; privatestaticvoid Main(string[] args) { Thread thread1 =new Thread(PrintValue); Thread thread2 =new Thread(PrintValue); thread1.Start(4); thread1.Join(); thread2.Start(); } staticprivatevoid PrintValue(object args) { if(args!=null) _value = (int) ar...

Dziel się z innymi:
Piotr Zieliński » Atrybut ThreadStaticAttribute

Sztuka programowania 2674 dni, 15 godzin, 8 minut temu pzielinski 92 źrodło rozwiń

Napiszemy prosty program wielowątkowy, zrobimy synchronizację z głównym wątkiem (aby czekał dokładnie do momentu zakończenia drugiego wątku) i dodatkowo prześlemy parametr do nowo tworzonego wątku. To wszystko jest często niezbędne w aplikacjach i warto wiedzieć jak to się robi. Poprzednio wątki synchronizowane były za pomocą zmiennej bool. Nie jest to dobre rozwiązanie. Dodatkowo wątek główny musiał sprawdzać co pewien czas wartość tej zmiennej. Tutaj rozwiążemy to nieco bardziej optymalnie. Stw...

Dziel się z innymi:
C# na blache: Program wielowątkowy

Sztuka programowania 2680 dni, 11 godzin, 38 minut temu sikor02 322 źrodło rozwiń

Zastanawiałeś się kiedyś po co przy deklaracji delegata wymagane jest podawanie nazw zmiennych nawet jeśli nie są do niczego potrzebne? Weźmy np prostego delegata przyjmującego 2 inty i zwracającego inta: public delegate int SimpleDelegate(int x, int y); Jeśli zdefiniujemy sobie takiego delegata gdzieś w programie to przecież nie używamy nigdzie tych zmiennych: SimpleDelegate d = new SimpleDelegate(SomeFunction); Więc czemu nie można zadeklarować delegata np w taki sposób? (kompilator nie ...

Dziel się z innymi:
C# na blache: Nazwy zmiennych w delegatach

Sztuka programowania 2681 dni, 9 godzin, 11 minut temu sikor02 128 źrodło rozwiń

Jak już wspomniałem w jednym z moich wcześniejszych postów, sortowanie danych możliwe jest za pomocą implementowania specjalnych interfejsów (IComparer, IComparable) i zapytań LINQ. LINQ jest... leniwe. Jednak wbrew pozorom może być to pożądana cecha. Znaczy to tyle, że nawet jeśli utworzymy zapytanie, to taka konstrukcja:var sort = from p in people2 orderby p.Age select p; nie wykona tego zapytania i nie przypisze nam wyniku do zmiennej "sort". Trzeba...

Dziel się z innymi:
C# na blache: Leniwe LINQ

Sztuka programowania 2681 dni, 9 godzin, 11 minut temu sikor02 211 źrodło rozwiń

Czas na małe szaleństwo z interfejsami, łączeniem konstruktorów, przesłanianiem metod i metodami rozszerzającymi! Wyobraźmy sobie, że mamy tablicę własnych obiektów np samochodów. Chcemy posortować te samochody raz po identyfikatorze, raz po prędkości maksymalnej, a jeszcze innym razem według koloru. Jest to bardzo proste dzięki zastosowaniu interfejsu IComparer (zdefiniowany w System.Collections). Przy okazji skorzystamy z pozostałych wcześniej wymienionych technik. Należy pamiętać że stosowan...

Dziel się z innymi:
C# na blache: Sortowanie własnych obiektów po dowolnych polach

Sztuka programowania 2681 dni, 9 godzin, 11 minut temu sikor02 195 źrodło rozwiń

Zrobiłem mały test. Chciałem sprawdzić co jest wydajniejsze, LINQ czy użycie IComparera. Odpowiedź: "to zależy?" Na początek zrobiłem małą klasę obiektu do testowania, która wyglądała tak: Następnie w głównej pętli programu napisałem następujący kod: static void Main(string[] args) { string name = "Mr. Tomek"; Random r = new Random(); int size = 50; Stopwatch stopWatch = new Stopwatch(); while (size < repeats;="" ++a)="" {="" person[]="" people1="new" person[size];="...

Dziel się z innymi:
C# na blache: LINQ vs IComparable czas sortowania / performance

Sztuka programowania 2681 dni, 9 godzin, 11 minut temu sikor02 130 źrodło rozwiń

Pora na wielowątkowość! W najbliższych postach zajmę się wielowątkowością w C#. Jednak zanim przejdę do "prawdziwych" watków (z przestrzeni System.Threading), najpierw asynchroniczne delegaty. Asynchroniczne delegaty Delegata można utożsamiać ze wskaźnikiem na funkcję z zachowaniem bezpieczeństwa typów. Takiego delegata można wywołać synchronicznie i asynchronicznie. Asynchroniczne wywołanie delegata daje takie same rezultaty jak utworzenie nowego wątku a jest nawet prostrze!  Jak się okaże, wystar...

Dziel się z innymi:
C# na blache: Asynchroniczne wywołanie delegatów

Sztuka programowania 2681 dni, 9 godzin, 11 minut temu sikor02 291 źrodło rozwiń

Chciałbym poświęcić kilka postów na opisanie WeakReference oraz praktycznych przykładów wykorzystania tej klasy. W dzisiejszym wpisie strona teoretyczna i opis klasy. Referencje w środowisku .NET można podzielić na słabe (weak references) oraz silne\mocne (strong references).  Silne referencje są wszystkim doskonale znane np:var sampleClass =new SampleClass(); Innymi słowy jest to standardowy typ powiązania. W momencie gdy wszystkie silne referencje zostaną usunięte wtedy GC może zacząć usuwać taki o...

Tagi: C#, WeakReference
Dziel się z innymi:
Piotr Zieliński » WeakReference – wprowadzenie

Sztuka programowania 2688 dni, 2 godziny, 4 minuty temu pzielinski 297 źrodło rozwiń

1 2... 54 55 56 57 58
Sklep z gadzetami

Najaktywniejsi

1
(32 891,59)
2
(32 816,53)
3
(27 178,29)
4
(21 178,88)
5
(20 336,33)
6
(13 018,14)
7
(10 512,22)
8
(9 775,28)
9
(8 373,27)
10
(6 822,96)
11
(6 214,22)
12
(5 393,84)
13
(4 107,39)
14
(4 026,71)
15
(3 863,06)
16
(3 599,51)
17
(3 448,35)
18
(3 318,39)
19
(3 224,66)
20
(3 105,41)