Strona głównaUżytkownik

pzielinski | użytkownik

pzielinski
pzielinski
27 178,29
3884 dni, 1 godzinę, 53 minuty temu
21 lutego, 2010
dotnetomaniak.pl

W ostatnich postach opisuje różne mechanizmy synchronizacji w c#. Jak widać, jest tego na prawdę wiele i sama znajomość słowa lock nie wystarcza jeśli poważnie myśli się o algorytmach współbieżnych. Dziś kolejna metoda synchronizacji a mianowicie klasa CountdownEvent. Ostatnie posty oprócz wprowadzenia do wspomnianych klas stanowią wstęp do kolekcji współbieżnych, które zamierzam omówić wkrótce. Konstruktor CountdownEvent przyjmuje liczbę całkowita (zwykle większą od 0), która stanowi wartość początkową...

Dziel się z innymi:
Piotr Zieliński » Synchronizacja za pomocą CountdownEvent

Sztuka programowania 4346 dni, 8 godzin, 7 minut temu pzielinski 112 źrodło rozwiń

Dziś krótki post o ciekawej konwersji, która ma miejsce podczas przekazywania delegat. Rozważmy kod

Tagi: C#, Method group
Dziel się z innymi:
Piotr Zieliński » Method group

Inne 4350 dni, 19 godzin, 3 minuty temu pzielinski 232 źrodło rozwiń

Dziś kolejny post o synchronizacji w c#. Semafor to bardzo popularna forma limitowania liczby wątków, które mogą mieć dostęp do danego kodu. Nie chcę omawiać tutaj podstaw semafora, ale myślę, że warto przypomnieć ogólną zasadę. Pseudokod (źródło Wikipedia):procedure V (S : Semaphore); begin (* Operacja atomowa: inkrementacja semafora *) S := S +1; end; (* Operacja atomowa: dekrementacja semafora ) procedure P (S : Semaphore); begin ( Cała operacja jest atomowa *) repeat Wait()...

Dziel się z innymi:
Piotr Zieliński» Semafor w c#

Sztuka programowania 4353 dni, 5 godzin, 50 minut temu pzielinski 262 źrodło rozwiń

W .NET istnieje wiele sposobów synchronizacji pracy wątków. O dużej części z nich pisałem już na blogu (z ciekawszych np. klasa Barrier ). Najpopularniejszym i najłatwiejszym sposobem jest użycie słowa kluczowego lock. W wielu przypadkach jest to najlepszy i najbezpieczniejszy wybór. SpinLock to zupełnie inne podejście. W przypadku lock, wątek jest usypiany i budzony gdy przyjdzie na niego kolej. Ma to kilka poważnych wad. Wiążą się one z szeregowaniem oraz zmianą kontekstu. Zmiana kontekstu jest dość c...

Dziel się z innymi:
Piotr Zieliński » Synchronizacja za pomocą SpinLock

Inne 4356 dni, 1 godzinę, 55 minut temu pzielinski 197 źrodło rozwiń

W .NET 4.0 wprowadzoną klasę Tuple służącą do owijania kilku wartości w jeden obiekt. Tuple to nic innego jak obiekt zawierający w sobie jakieś dane w postaci właściwości. Do dyspozycji jest 8 statycznych  metod służących do stworzenia Tuple:Create(T1)Create(T1,T2)Create(T1,T2,T3)Create(T1,T2,T3,T4)Create(T1,T2,T3,T4,T5)Create(T1,T2,T3,T4,T5,T6)Create(T1,T2,T3,T4,T5,T6,T7)Create(T1,T2,T3,T4,T5,T6,T7,T8) Ponadto istnieje możliwość stworzenia tuple za pomocą jednego z konstruktorów:Tuple

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

Inne 4358 dni, 17 godzin, 47 minut temu pzielinski 266 źrodło rozwiń

Dziś znów powrót do podstaw inżynierii oprogramowania. Przedstawianie podstawowej zasady może wydawać się śmieszne ale mimo wszystko programista dobrze jak wie, że taka zasada ma swoją nazwę i naprawdę powinno się tego przestrzegać.  Za pewne wiele programistów nie zna nazw tych reguł ale i tak postępuje zgodnie z nimi. Post ma jednak uświadomić, że takie praktyki są dobrze udokumentowane i są na naprawdę dobrym zwyczajem a nie tylko intuicją doświadczonego programisty. Wzorzec dotyczy konstrukcji metod...

Tagi: CQS
Dziel się z innymi:
Piotr Zieliński » Zasada Command-query separation (CQS)

Architektura 4361 dni, 18 godzin, 38 minut temu pzielinski 312 źrodło rozwiń

W dzisiejszym poście o dwóch nowościach. Pierwsza z nich to ulepszona kompatybilność. W VS 11 można otwierać solucje utworzone w Visual Studio 2010 bez znanego “Upgrade”. Oznacza to, że można jednocześnie na tym samym projekcie pracować zarówno w VS 11 jak i VS 2010. Projekt otworzony w VS 11 nie powoduje zmiany  formatu i później wciąż może być otwierany w VS 2010. Moim zdaniem znaczącą ułatwia to migrację. Niestety projekt utworzony od nowa w VS 11 nie może być już otwarty w 2010 ale wydaje się to natu...

Tagi: C#, Visual Studio
Dziel się z innymi:
Piotr Zieliński » Visual Studio 11 – kompatybilność wstecz oraz Solution Explorer

Narzędzia 4364 dni, 17 godzin, 39 minut temu pzielinski 156 źrodło rozwiń

W ostatnim poście o nowościach w VS 11 pisałem o szarych ikonach, co w większości osobom nie przypadło do gustu. Z tego co obserwuję, zdecydowana większość jest rozczarowana nowymi ikonami. Dzisiaj jednak chciałbym zaprezentować praktyczniejszą funkcję – nowy QuickLaunch. Na początek PrintScren: Chodzi mi oczywiście o QuickLaunch znajdujący się w prawym górnym rogu. Wpisując jakiś tekst, zostanie przeszukanych kilka typów informacji jak:Otwarte dokumenty (przeszukuje po ich nazwie).Item’y w menu – bar...

Tagi: C#, Visual Studio
Dziel się z innymi:
Piotr Zieliński » Visual Studio 11– QuickLaunch

Narzędzia 4365 dni, 13 godzin, 17 minut temu pzielinski 203 źrodło rozwiń

W wielu publikacjach service locator podawany jest jako wzorzec projektowy, doskonale nadający się do implementacji inversion of control. W poście jednak chciałbym przedstawić drugą szkołę, która uważa, że ten wzorzec jest “brzydki” i powoduje ogromne zamieszanie. Przede wszystkim odpowiedzmy sobie kiedy używamy podejścia IoC? W aplikacjach tymczasowych? Prototypach? Raczej nie… Początkowy czas na napisanie aplikacji IoC może okazać się dłuższy a korzyści nadchodzą dopiero po kilku miesiącach implementa...

Dziel się z innymi:
Piotr Zieliński » Service Locator jako anti-pattern

Architektura 4369 dni, 2 godziny, 51 minut temu pzielinski 312 źrodło rozwiń

Co poniższy kod zwróci na ekranie? Spodziewać się można 0,1,2. Jednak na ekranie ujrzymy 5,5,5. Dlaczego?

Tagi: C#, Lambda
Dziel się z innymi:
Piotr Zieliński » Wyrażenia lambda i niespodziewany rezultat

Inne 4372 dni, 5 godzin, 4 minuty temu pzielinski 259 źrodło rozwiń

Zamierzam napisać kilka krótkich postów o nowych funkcjonalnościach w Visual Studio 11. Na dobry początek zacznijmy po prostu od screenu: Co od razu rzuca się w oczy? Czarno białe ikony. Dla porównania zobaczymy jak wygląda “stary” Visual Studio: Na pierwszy rzut oka to poprzednia wersja wygląda dużo nowocześniej ze względu na kolorowe, bardziej 3d ikonki. Dlaczego Microsoft zdecydował się na taki krok? Z tego co wiem, doszli do wniosku, że środowisko programistyczne nie powinno być zabawką i nie m...

Tagi: C#, Visual Studio
Dziel się z innymi:
Piotr Zieliński » Visual Studio 11 – pierwsze spojrzenie

Narzędzia 4373 dni, 9 godzin, 36 minut temu pzielinski 231 źrodło rozwiń

W c# 5.0 dodano dwa nowe atrybuty: CallerMemberName oraz CallerFilePath. Można je stosować do domyślnych parametrów metod:staticprivatevoid Print([CallerMemberName]string methodName =null, [CallerFilePath]string fileName =null) { Console.WriteLine(methodName); Console.WriteLine(fileName); } Wywołanie powyższej metody bez podania argumentów spowoduje przekazaniem nazwy metody, która wywołała Print oraz ścieżki pliku w którym znajduje się ta metoda:Print(); Jeśli Print został wywołany w metodzie ...

Tagi: atrybuty, C#
Dziel się z innymi:
Piotr Zieliński » C# 5.0: Atrybuty CallerMemberName, CallerFilePath oraz implementacja interfejsu INotifyPropertyChanged

Inne 4373 dni, 9 godzin, 36 minut temu pzielinski 209 źrodło rozwiń

Często widzę następujący kod. Oczywiście jeśli mamy pewność, że zawsze jest klucz nie ma z tym problemu. Czasami jednak takiej pewności nie ma i należy zwrócić NULL albo stworzyć dany element w słowniku. Wtedy zaczynają się problemy bo najczęściej jest to dokonywane za pomocą:

Tagi: C#, data-access
Dziel się z innymi:
Piotr Zieliński » Code review: bezpieczny dostęp do danych

Inne 4376 dni, 11 godzin, 43 minuty temu pzielinski 192 źrodło rozwiń

Pytanie brzmi: czy metody statyczne są wydajniejsze niż ich “zwykłe” odpowiedniki (instance methods)? Odpowiedź brzmi tak, ponieważ:Wywołanie jakiejkolwiek niestatycznej metody na klasie powoduje przekazanie parametru “this” – a to wymaga dodatkowego czasu.Same wywołanie jest bardziej czasochłonne dla zwykłych metod. W klasach statycznych nie ma dziedziczenia i wirtualnych metod. W niestatycznych metodach, kompilator musi dokonać kilka  dodatkowych operacji. Każda metoda niestatyczna jest wywoływana za p...

Tagi: C#, static
Dziel się z innymi:
Piotr Zieliński » Statyczne metody – wydajność

Inne 4379 dni, 4 godziny, 13 minut temu pzielinski 249 źrodło rozwiń

O wzorcu projektowym singleton napisałem już kiedyś sporawy post. Klasy statyczne są prostym mechanizmem i mogą przypominać singleton. Tak jak w singleton, w klasach statycznych mamy do dyspozycji wyłącznie jedną instancję obiektu. Również nie ma możliwości ręcznego stworzenia instancji obiektów. Czym się zatem te twory różnią? 1. Singleton może implementować interfejs lub dziedziczyć po bazowej klasie. Jest to poważna zaleta w stosunku do klasy statycznej. Dzięki temu można np.:class XnaRenderer: IRend...

Tagi: C#
Dziel się z innymi:
Piotr Zieliński » Singleton a klasy statyczne

Inne 4381 dni, 11 godzin, 38 minut temu pzielinski 234 źrodło rozwiń

Rozważmy następujący. Co jest największym problemem tego kodu? Wszystkie przykłady wymyślam na bieżąco dlatego oprócz głównego problemu, który chce zaprezentować w poście, istnieje kilka pobocznych.

Tagi: C#
Dziel się z innymi:
Piotr Zieliński » Code review: lista danych

Inne 4383 dni, 9 godzin, 31 minut temu pzielinski 273 źrodło rozwiń

W c# słowo kluczowe nie służy wyłącznie do alokacji zasobów. W klasach istnieje koncepcja wirtualnych metod, które deklaruje się za pomocą słowa virtual. Są to podstawy polimorfizmu więc w tym poście nie będę opisywał już słówka virtual a wyłącznie new, które używa się również w połączeniu z metodą. Metoda oznaczona new po prostu przykrywa metodę bazową. Najlepiej wyjaśnić to na przykładzie 2 klas:class Cat:Animal { publicvoid Print() { Console.WriteLine("Cat"); } } class Animal { pub...

Dziel się z innymi:
Piotr Zieliński » Method hiding w c# – kiedy używać?

Inne 4386 dni, 18 godzin, 53 minuty temu pzielinski 253 źrodło rozwiń

Immutable objects to obiekty w inżynierii oprogramowania, które pozostają niezmienne po ich inicjalizacji. Wszystkie typy numeryczne, struktury oraz inne value type są immutable. Istnieją również klasy, które zachowują się jak typy niezmienne. Spróbujmy opisać kilka ważnych cech tych obiektów, które mają dla nas specjalne znaczenie:Obiekty niezmienne (immutable) są thread-safe – przystosowane są do dostępu współbieżnego. Skoro obiekt już skonstruowany nie może zostać zmodyfikowany to nie musimy się kompl...

Dziel się z innymi:
Piotr Zieliński » Obiekty niezmienne – immutable objects

Inne 4389 dni, 18 godzin, 39 minut temu pzielinski 283 źrodło rozwiń

Dzisiaj pokażę, jak od strony programistycznej wygląda AppDomain. Zwykle tworzymy aplikację host, która trzyma referencje do kilku AppDomain. Stwórzmy najpierw aplikację konsolową wyświetlającą po prostu tekst:namespace ConsoleApplication3 { class Program { staticvoid Main(string[] args) { while (true) { Console.WriteLine(AppDomain.CurrentDomain.FriendlyName); System.Threading.Thread.Sleep(2000); } } }...

Tagi: AppDomain
Dziel się z innymi:
Piotr Zieliński » AppDomain–część II

Architektura 4392 dni, 4 godziny, 38 minut temu pzielinski 124 źrodło rozwiń

W .NET istnieje twór zwany AppDomain. W systemie operacyjnym mamy kilka podobnych pojęć takich jak proces czy wątek. AppDomain w dużej mierze przypomina proces – służy do izolowania aplikacji bezpośrednio niezwiązanych ze sobą. Dwa różne procesy mają przede wszystkim różną przestrzeń pamięciową. Adres zmiennej w procesie A, odnosi się już do innego obszaru w procesie B – alokacja zaczyna się w różnych miejscach.  Z tego względu uruchomienie nowego procesu jest czasochłonną operacją i wiąże się z alokacją...

Tagi: AppDomain
Dziel się z innymi:
Piotr Zieliński » Co to jest AppDomain?

Architektura 4395 dni, 5 godzin, 56 minut temu pzielinski 255 źrodło rozwiń

1 2... 7 8 9 10 11 12... 19 20