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

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 4509 dni, 9 godzin, 16 minut temu pzielinski 66 ź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 4511 dni, 3 godziny, 20 minut temu pzielinski 93 ź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 4516 dni, 23 godziny, 50 minut temu sikor02 323 ź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 4517 dni, 21 godzin, 23 minuty temu sikor02 129 ź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 4517 dni, 21 godzin, 23 minuty temu sikor02 216 ź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 4517 dni, 21 godzin, 23 minuty temu sikor02 200 ź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 4517 dni, 21 godzin, 23 minuty temu sikor02 132 ź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 4517 dni, 21 godzin, 23 minuty temu sikor02 304 ź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 4524 dni, 14 godzin, 16 minut temu pzielinski 322 źrodło rozwiń

W dwóch poprzednich wpisach rozważałem odczyt i zapis danych, które były odzwierciedleniem (obrazem) pamięci w tzw. programach Win32 (czyli pracujących w środowisku 32 bitowych Windows, z bezpośrednim, niezarządzanym dostępem do pamięci). Wypadałoby postawić „kropkę nad i” tj. wspomnieć jeszcze o klasie Buffer oraz opisać związane z nią i klasami Encoding i BitConverter niuanse, które, gdybym umieścił je w poprzednich wpisach, niepotrzebne utrudniły by lekturę ...

Źródło: paskol.robi.to
Dziel się z innymi:
Me z .NET tete-a-tete » Czas kompleksowo ogarnąć reprezentację binarną

Sztuka programowania 4526 dni, 20 godzin, 52 minuty temu PaSkol 88 źrodło rozwiń

I’m a big fan of using con­ven­tions when devel­op­ing appli­ca­tions. I blogged about it in the past (here, here and later here). I also gave a talk about my expe­ri­ence with this approach and how I cur­rently use it at NDC last week (slides are avail­able here, video is here). One prob­lem I faced when try­ing to build con­ven­tion val­i­da­tion tests was lack of sim­ple API that would allow me to build the val­i­da­tion rules for my tests. I built a spike of such library (call...

Źródło: kozmic.pl
Dziel się z innymi:
[EN] Using ConventionTests «  Krzysztof Koźmic on software

Sztuka programowania 4530 dni, 4 godziny, 14 minut temu Paweł Łukasik 80 źrodło rozwiń

Kontynuując temat z poprzedniego wpisu, obecnie przedstawię, w jaki sposób wypełnić plik, aby odpowiadał obrazowi pamięci oczekiwanemu przez aplikacje nie napisane w .NET (napisane w kodzie niezarządzanym). W tym wypadku swoją rolę ponownie odegrają klasy BitConvert oraz Encoding. W obu wypadkach użyte zostaną metody o takiej samej nazwie: GetBytes...

Źródło: paskol.robi.to
Dziel się z innymi:
Me z .NET tete-a-tete » Jak plik obrazem pamięci wypełnić i nic nie pokręcić

Sztuka programowania 4536 dni, 20 godzin, 36 minut temu PaSkol 84 źrodło rozwiń

Gdy już kończymy pisać program na którym zarobimy pierwszy milion większość z nas chciałaby stworzyć do niego własny instalator. Oczywiście możesz spakować aplikację i pozwalać użytkownikom ściągać gotowy plik wykonywalny, ale co gdy zajdzie potrzeba wprowadzenia np. Klucza sprawdzającego oryginalność nabytego programu lub zwykłej rejestracji użytkownika w serwisie?Setup Wizard Zacznijmy więc od stworzenie prostego instalatora aplikacji. W Solution Explorer dodajemy nowy projekt: Add -> New Pr...

Źródło: kodzimy.net
Dziel się z innymi:
Setup project oraz Custom Actions | kodzimy.net

Sztuka programowania 4536 dni, 20 godzin, 36 minut temu kodzimy-net 147 źrodło rozwiń

Dziś po długim wprowadzeniu teoretycznym, mającym na celu wyjaśnienie “zaawansowanych” mechanizmów synchronizacji czas przyszedł na pokazanie pierwszej struktury danych. Przed pojawieniem się asynchronicznych kolekcji, najczęściej korzystało się z prostego lock’a jak:lock(_Sync) { _list.Add(newElement); } Rozwiązanie mało wygodne i przede wszystkim niewydajne. Nowe kolekcje zawierają mechanizmy synchronizacji omówione w poprzednich postach takie jak:SpinLock SpinWait SemaphoreSlim CountdownEvent ...

Dziel się z innymi:
Piotr Zieliński » Wprowadzenie do współbieżnych kolekcji danych na przykładzie ConcurrentBag

Sztuka programowania 4538 dni, 4 godziny, 42 minuty temu pzielinski 163 źrodło rozwiń

Jestem w miarę świeżo po przeczytanie Programowania Windows 8  (w wersji preview) napisanej przez pana który się nazywa Charles Petzold. Krótka recenzja: Aktualnie książka zawiera siedem rozdziałów, w nich omówienie XAML, mechanizmu wiązań, kontrolek, layout i krótko o WinRT. Jeśli ktoś z was pisał już w WPF czy SL nie znajdzie w niej (przypominam że mówię ciągle o wersji preview) nic ciekawego. Prawie nic, otóż są dwie nowości warte uwagi wprowadzone w nowszej wersji .NET. CallerMemberName oraz async/...

Dziel się z innymi:
jstadnicki: Async i Await w Windows8 - małe szoł

Sztuka programowania 4540 dni, 21 godzin, 8 minut temu Paweł Łukasik 178 źrodło rozwiń

Jak wiadomo wszystkie dane platformy .NET są przechowywane w postaci obiektów [...], więc siłą rzeczy sposób przechowywania tychże danych jest ukryty przed programistą (obiekty są wszak hermetyczne). Jest to całkowicie odmienne podejście do przechowywania danych w stosunku do stosowanego przed erą .NET. Tam typy proste były zwyczajnie obszarem pamięci, który był odpowiednio interpretowany przez oprogramowanie (dbał o to kompilator)...

Źródło: paskol.robi.to
Dziel się z innymi:
Me z .NET tete-a-tete » Jak plik z obrazem pamięci odczytać i nic nie pokręcić

Sztuka programowania 4540 dni, 21 godzin, 8 minut temu PaSkol 132 źrodło rozwiń

Dziś kolejny mechanizm potrzebny do zrozumienia struktury SpinWait, którą opiszę w następnym poście. Thread.Yield oddaje wątek z powrotem do CPU. Wywołanie mówi, że nie mam nic więcej do roboty i jeśli CPU ma coś lepszego do zrobienia to niech to zrobi a po tym dopiero wątek macierzysty zostanie wznowiony. Innymi słowy jeśli wątek A wywołuje Thread.Yield wtedy CPU zawiesza go, wykonuje inny i potem z powrotem powraca do wątku A. Jednak należy zaznaczyć, że w przypadku Yield, może zostać wybrany wątek wył...

Tagi: C#, Thread
Dziel się z innymi:
Piotr Zieliński » Thread.Yield vs Thread.Sleep(0) vs Thread.Sleep(1)

Sztuka programowania 4546 dni, 17 godzin, 33 minuty temu pzielinski 141 źrodło rozwiń

Posted by slanto on Załóżmy, że mamy zdefiniowaną stałą listę dostępnych pół formularza: imię, nazwisko, data urodzenia, płeć. Pola te mogą być wyświetlane w różnych konfiguracjach, np. Imię z nazwiskiem, nazwisko z datą urodzenia lub tylko płeć. Pomijając fakt że z reguły typy wyliczeniowe łamią zasadę Open/Closed principle (http://pl.wikipedia.org/wiki/Zasada_otwarte-zamkni%C4%99te) i zastosowanie ich w tym przypadku może nie jest najlepszym pomysłem, to jednak chcąc pokazać jak zachowuje się typ...

Tagi: C# .NET, Enum, flags
Dziel się z innymi:
Enum z atrybutem Flags | Zapiski programisty .net

Dziś kolejny post z ostatniego cyklu o o wielowątkowości.  Myślę, że Thread.Sleep jest znany każdemu – służy po prostu do uśpienia wątku. Na przykład:

Dziel się z innymi:
Piotr Zieliński » Thread.SpinWait() a Thread.Sleep()

Sztuka programowania 4548 dni, 15 godzin, 16 minut temu pzielinski 161 źrodło rozwiń

Przechodząc na język C#, chcąc nie chcąc programuje się zgodnie z wyrobionych dotąd stylem i wg starych przyzwyczajeń. Niemniej, staram się weryfikować, czy obrana droga rzeczywiście jest tą, z której należy korzystać na nowym terenie, jakim jest C#. Dotąd często korzystałem z możliwości domyślnych parametrów, tak w konstruktorach, jak i w metodach (procedurach i funkcjach). Ostatnio mój kolega zauważył, że C# do konstrukcji klas nie używa konstruktorów z domyślnymi parametrami...

Źródło: paskol.robi.to
Dziel się z innymi:
Me z .NET tete-a-tete » Domyślność rozwiąże nadmierność przeciążeń

Sztuka programowania 4549 dni, 13 godzin, 37 minut temu PaSkol 131 źrodło rozwiń

1 2... 70 71 72 73 74