Strona głównaUżytkownik

pzielinski | użytkownik

pzielinski
pzielinski
27 178,29
2140 dni, 21 godzin, 59 minut temu
21 lutego, 2010
dotnetomaniak.pl

Załóżmy, że w kodzie zobaczymy enum’a np.:publicenum Colors { Black, Red, Yellow }; Jeśli budujemy framework lub jakąkolwiek bibliotekę należy być świadomym zagrożeń wynikających z wewnętrznej budowy enum’a. Warto zajrzeć do Reflector’a aby przekonać się o tym:.classpublic auto ansi sealed Colors extends [mscorlib]System.Enum { .field publicstatic literal valuetype ConsoleApplication1.Colors Black = int32(0) .field publicstatic literal valuetype ConsoleApplication1.Colors Red = i...

Tagi: Enum
Dziel się z innymi:
Piotr Zieliński  » Code Review: Publiczny enum

Sztuka programowania 2191 dni, 15 godzin, 34 minuty temu pzielinski 251 źrodło rozwiń

W ostatnim wpisie przedstawiłem aspekt do obsługi wyjątków. Dzisiaj trochę więcej o samych aspektach dla metod. Oprócz wyświetlenia  nazwy metody czy przekazanych parametrów można wyciągnąć trochę więcej informacji. Dla przypomnienia, parametry można wyświetlać następująco:publicoverridevoid OnEntry(MethodExecutionArgs args) { var argValues =new StringBuilder(); foreach (var argument in args.Arguments) { argValues.Append(argument.ToString()).Append(","); } Console.WriteLin...

Tagi: PostSharp
Dziel się z innymi:
Piotr Zieliński » Postsharp – aspekty metod (OnMethodBoundaryAspect)

Sztuka programowania 2193 dni, 11 godzin, 45 minut temu pzielinski 101 źrodło rozwiń

O programowaniu aspektowym kiedyś już pisałem więc jeśli od strony teoretycznej nie jest to jasne to zachęcam do poszperania na blogu. Dzisiaj zaprezentuje framework Postsharp w wersji express (darmowa edycja, również do zastosowań komercyjnych). Jak wiemy, obsługa wątków czy wykonanie logów mogą być problemami cross-cutting. Postsharp jest typowym framework’iem implementującym AoP Zaczynamy od instalacji z NuGet:   Pomimo, że Postsharp express jest w pełni darmowy, musimy zarejestrować się i uzyskać...

Tagi: AOP, PostSharp
Dziel się z innymi:
Piotr Zieliński » Obsługa wyjątków za pomocą programowania aspektowego (Postsharp)

Sztuka programowania 2196 dni, 2 godziny, 8 minut temu pzielinski 218 źrodło rozwiń

O kontraktach już kiedyś pisałem tutaj. Dziś z kolei zaprezentuję bardzo złą praktyką, czasami niestety jeszcze spotykaną tzn.:interface IDataFilter { IEnumerable

Piotr Zieliński » Code Review: Złe użycie kontraktów w interfejsach

Sztuka programowania 2199 dni, 15 godzin, 29 minut temu pzielinski 223 źrodło rozwiń

Rozpocząłem właśnie nowy cykl artykułów o Enterprise Library. Dzisiaj pierwsza cześć o Log Application Block: http://msdn.microsoft.com/pl-pl/library/enterprise-library-logging-application-block–czesc-1 Zapraszam do lektury!

Dziel się z innymi:
Piotr Zieliński » Artykuł: Enterprise Library Logging Application Block – część I

Sztuka programowania 2202 dni, 15 godzin, 43 minuty temu pzielinski 124 źrodło rozwiń

W kilku ostatnich postach pisałem o blokach grupujących. Obiecywałem, że pokaże kilka przykładów ich zastosowania, w szczególności wyjaśniające zachowanie zachłanne i niezachłanne. W dzisiejszym wpisie, zaprezentuję przykład (lekko zmodyfikowany z MSDN) jak JoinBlock i BufferBlock mogą zostać zastosowane. Wyobraźmy sobie, że mamy kilka źródeł danych. Na przykład: WCF, pliki oraz pamięć. Odczyt z WCF prawdopodobnie będzie najwolniejszy. W zależności od lokalizacji, odczyt pliku prawdopodobnie będzie dużo...

Dziel się z innymi:
Piotr Zieliński » TPL Dataflows – część VIII (przykład z BufferBlock i JoinBlock)

Sztuka programowania 2205 dni, 13 godzin, 2 minuty temu pzielinski 20 źrodło rozwiń

Czasami w WPF zachodzi potrzeba stworzenia dependency property ale tylko do odczytu. Zwykłą właściwość bardzo łatwo zaimplementować tzn.:publicdouble Area { get { return width*height; } } Jeśli korzystamy z binding’u danych, wtedy powyższe rozwiązanie jest niewystarczające i należy skorzystać z dependnecy property. Dla przypomnienia, standardowa deklaracja wygląda następująco:publicclass MyStateControl : ButtonBase { public MyStateControl() : base() { } public Boolean State { g...

Dziel się z innymi:
Piotr Zieliński » Właściwości tylko do odczytu w WPF

Windows 2209 dni, 7 godzin, 35 minut temu pzielinski 128 źrodło rozwiń

W ostatnich postach pisałem o JoinBlock oraz BatchedBlock czyli o blokach grupujących.  Dzisiaj czas na połączenie tych dwóch konstrukcji, a mianowicie BatchedJoinBlock. Jak sama nazwa sugeruje, block będzie łączył elementy z kilku źródeł w Tuple ale zamiast Tuple

Dziel się z innymi:
Piotr Zieliński » TPL Dataflows – część VII (BatchedJoinBlock)

Sztuka programowania 2210 dni, 14 godzin, 14 minut temu pzielinski 33 źrodło rozwiń

Kolejna część artykułu o GC. Zapraszam do lektury: http://msdn.microsoft.com/pl-pl/library/garbage-collector-cz-4-wycieki-pamieci

Dziel się z innymi:
Piotr Zieliński » Artykuł: Garbage Collector, cz. IV (wycieki pamięci)

Sztuka programowania 2213 dni, 10 godzin, 10 minut temu pzielinski 143 źrodło rozwiń

W poprzednim wpisie pisałem o pierwszym bloku grupującym – BatchBlock. Dziś czas przyszedł na kolejny element, tym razem JoinBlock. JoinBlock grupuje elementy podane na wejście w formie Tuple (pisałem o tej klasie kiedyś na blogu). Jeśli zatem podamy na wejście dwa integer’y, na wyjściu pojawi się Tuple

Dziel się z innymi:
Piotr Zieliński » TPL Dataflows – część VI (JoinBlock)

Sztuka programowania 2216 dni, 6 godzin, 23 minuty temu pzielinski 26 źrodło rozwiń

Dzisiaj pierwszy post o tzw. grouping block czyli blokach grupujących. Ich zasada jest prosta – grupują dane z różnych źródeł w sposób zależny już od konkretnego bloku. W tej części zajmiemy się BatchBlock, który przychodzące dane buforuje, a następnie przesuwa je na wyjście w zdefiniowanych porcjach. BatchBlock działa w dwóch trybach: greedy i non-greedy. W przypadku implementacji zachłannej, wszystko co pojawia się na wejściu jest akceptowane i przekazywane na wyjście gdy uzbiera się określona liczba ...

Dziel się z innymi:
Piotr Zieliński » TPL Dataflows – część V (BatchBlock)

Sztuka programowania 2223 dni, 15 godzin, 36 minut temu pzielinski 31 źrodło rozwiń

AutoResetEvent\ManualResetEvent może być używany do synchronizacji międzyprocesowej tak samo jak np. mutex. Posiada podobny zestaw metod do tworzenia obiektu z nazwą oraz późniejszego jego otwierania. Aby móc go użyć do synchronizacji międzyprocesowej należy oczywiście nadać obiektowi nazwę – tak samo jak to jest z Mutex. W tym problem, że konstruktory ManualResetEvent czy AutoResetEvent nie przyjmują takich parametrów. Zaglądając jednak do dokumentacji dowiemy się, że:publicsealedclass ManualResetEvent...

Dziel się z innymi:
Piotr Zieliński » AutoResetEvent\ManualResetEvent–synchronizacja między procesami

Sztuka programowania 2220 dni, 13 godzin, 55 minut temu pzielinski 62 źrodło rozwiń

W ostatnim poście wspomniałem o minimalnej liczbie wątków. Istnieje również górny próg, określający ile maksymalnie może zostać stworzonych wątków. Zbyt niski próg oraz zła architektura może spowodować bardzo trudny w znalezieniu błąd a mianowicie deadlock. Wyobraźmy sobie następującą sekwencję zdarzeń:Wątek T0 (lub główny, nie ma znaczenia) dodaje zadanie do puli.Stworzone zadanie tworzy n nowych zadań.T0 czeka aż wszystkie n zadań zostanie wykonanych (wait). Następnie przyjmijmy, że w tych n wątkach, ...

Dziel się z innymi:
Piotr Zieliński » Code review: pula wątków a maksymalna liczba wątków

Sztuka programowania 2223 dni, 15 godzin, 36 minut temu pzielinski 114 źrodło rozwiń

Pula wątków to specjalny mechanizm zaimplementowany w CLR, mający na celu ponowne używanie tych samych wątków. W dzisiejszym wpisie chciałbym wyjaśnić co to jest optymalna liczba wątków i jaki ona ma wpływ na wydajność. Rozważmy następujący kod:internalclass Program { publicstaticvoid Main() { for (int i =0; i

Dziel się z innymi:
Piotr Zieliński » Wątki z puli–optymalna liczba wątków.

Sztuka programowania 2226 dni, 15 godzin, 1 minutę temu pzielinski 140 źrodło rozwiń

Dzisiaj bardzo krótka notka, mająca na celu przestrzec przed modyfikacją jakichkolwiek właściwości wątku, który pochodzi z puli. Bardzo łatwo zmienić jego stan poprzez ustawienie nowego priorytetu albo zmianę kultury. Inny przykład to TLS o którym już pisałem na blogu. Dlaczego jest to tak złe?privatevoid Run() { Thread.CurrentThread.Priority = ThreadPriority.Highest; } Musimy zdać sobie sprawę, że takowe wątki wyłącznie wypożyczamy. Ktoś na forum porównał to do wypożyczalni samochodów. Gdy wypożycz...

Dziel się z innymi:
Piotr Zieliński » Code Review: wątki z puli oraz modyfikacja ich stanu

Sztuka programowania 2229 dni, 22 godziny, 28 minut temu pzielinski 68 źrodło rozwiń

Dzisiaj zajmiemy się kolejnym wzorcem przeznaczonym dla środowiska wielowątkowego. W dokumentacji\artykułach możemy go spotkać pod nazwą “condition pattern”. Załóżmy, że jeden wątek musi sprawdzić pewien warunek aby móc wykonać jakąś pracę. Innymi słowy, mamy współdzielony zestaw zmiennych, modyfikowanych przez różne wątki. Jeden z wątków może wykonać swój kod wyłącznie, gdy te współdzielone zmienne spełnią jakiś warunek. W jaki sposób moglibyśmy podejść do problemu? Najprostszym rozwiązaniem byłaby pęt...

Dziel się z innymi:
Piotr Zieliński » Sprawdzanie warunku w środowisku wielowątkowym

Programowanie rozproszone 2232 dni, 5 godzin, 27 minut temu pzielinski 167 źrodło rozwiń

Kolejna część artykułu o GC – tym razem o zasobach niezarządzanych. Zapraszam do lektury: http://msdn.microsoft.com/pl-pl/library/garbage-collector-cz-3-zasoby-niezarzadzane

Dziel się z innymi:
Piotr Zieliński » Artykuł– Garbage Collector, cz. III

Sztuka programowania 2235 dni, 22 godziny, 18 minut temu pzielinski 116 źrodło rozwiń

W ostatnim wpisie pokazałem dostępne bloki buforujące. Dzisiaj zajmiemy się prostym przykładem, który jest bardziej praktyczny  od tego przedstawionego w poprzednim poście. Załóżmy, że piszemy system, który składa się z kilku wątków przetwarzających. Każdy z nich pełni rolę konsumenta – przetwarza dane. Chcemy to tak zoptymalizować, aby nowe dane były wysyłane wyłącznie do jak najmniej zajętych węzłów. Oczywiście temat jest bardziej skomplikowany niż może wydawać się, ale dzisiaj pokażemy jak można do te...

Dziel się z innymi:
Piotr Zieliński » TPL Dataflows – część IV (przykład z BufferBlock)

Sztuka programowania 2238 dni, 13 godzin, 57 minut temu pzielinski 29 źrodło rozwiń

Dzisiaj wracamy do tematu TPL Dataflows. W ostatniej części zajęliśmy się m.in. BroadcastBlock, który jest jednym z bloków buforujących. Dla przypomnienia przykład:class Program { privatestaticvoid Main(string[] args) { BroadcastBlock

Dziel się z innymi:
Piotr Zieliński » TPL Dataflows – część III (bloki buforujące)

Sztuka programowania 2241 dni, 14 godzin, 37 minut temu pzielinski 77 źrodło rozwiń

ReaderWriterLockSlim jest klasą, która ma zastąpić ReadWriterLock, znanego ze starych wersji framework’a. Ale zacznijmy od początku… Dlaczego zwykły lock nie zawsze jest wystarczający? ReaderWriterLockSlim pracuje w trzech trybach:mutual lock – inaczej writer lock. Wyłącznie jedna taka blokada może zostać nadana. Jest to typowy lock i należy z niego korzystać, gdy modyfikujemy dane. shared (reader) lock – wiele wątków może mieć dostęp do tych samych danych. Można nadać wiele shared lock, pod warunkiem, ...

Piotr Zieliński » ReaderWriterLockSlim – synchronizacja danych

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

1 2 3 4 5... 19 20
Sklep z gadzetami
Dotnetos Conference
itCareerSummit

Najaktywniejsi

1
(32 881,59)
2
(32 816,53)
3
(27 178,29)
4
(21 178,88)
5
(20 336,33)
6
(13 018,14)
7
(10 449,89)
8
(9 775,28)
9
(8 283,27)
10
(6 822,96)
11
(6 214,22)
12
(5 393,84)
13
(4 097,38)
14
(3 979,62)
15
(3 863,06)
16
(3 599,35)
17
(3 448,35)
18
(3 318,39)
19
(3 224,66)
20
(3 105,41)