Strona głównaUżytkownik

pzielinski | użytkownik

pzielinski
pzielinski
27 178,29
4120 dni, 2 godziny, 22 minuty temu
21 lutego, 2010
dotnetomaniak.pl

Zauważyłem, że czasami programiści używają Debug.WriteLine, aby wyświetlić jakieś informacje w oknie output: Debug.WriteLine("Jakies informacje."); Nie ma w tym nic złego, ale czasami dodawana jest powyższa linia tylko tymczasowo, aby ułatwić sobie debugowanie (szczególnie aplikacji wielowątkowej). Visual Studio pozwala osiągnąć ten sam efekt, za pomocą zwykłego breakpoint’a. Wystarczy najpierw ustawić breakpoint (naciskamy F9), a potem kliknąć na nim i wybrać When Hit: Zostanie otworzone nowe ok...

Tagi: debugowanie
Dziel się z innymi:
Piotr Zieliński » Debugowanie i wyświetlanie informacji w oknie output.

Narzędzia 4117 dni, 10 godzin, 29 minut temu pzielinski 362 źrodło rozwiń

Kilka dni temu opisywałem jak w VS 2008 debugować kod .NET Framework i obiecywałem sprostowanie do wersji 2012. Z tego co udało mi się dowiedzieć, temat nie jest zbyt jasny ale wygląda na to, że: 1. W niektórych wersjach VS2010 działało to ale potem znów zostało popsute. 2. W VS2012 funkcja nie działa. Jeśli komuś udało się to uruchomić pod VS 2012, proszę o komentarz pod wpisem. Link do Microsoft Connect, opisujący bug: http://connect.microsoft.com/VisualStudio/feedback/details/697947/net-framewo...

Dziel się z innymi:
Piotr Zieliński » Debugowanie kodu zewnętrznych bibliotek, część II

Narzędzia 4120 dni, 17 godzin, 33 minuty temu pzielinski 250 źrodło rozwiń

W ostatnim wpisie pokazałem jak debugować kod .NET Framework w VS2008. Wciąż próbuje wyjaśnić w jakich wersjach to działa a w jakich nie. W następnym wpisie mam nadzieję, że wspomnę jak sprawa wygląda z VS 2010 i VS2012. Wątki w aplikacjach są dziś już nieodłącznym elementem. Wprowadzenie async\await jeszcze bardziej upowszechniło i ułatwiło pisanie kodu wykonywanego równolegle. W przypadku, gdy aplikacja wielowątkowa zachowuje się podejrzanie, znalezienie błędu może być bardzo trudnym wyzwaniem. Visual...

Dziel się z innymi:
Piotr Zieliński » Debugowanie aplikacji wielowątkowych: Parralel Stacks

Narzędzia 4125 dni, 18 godzin, 53 minuty temu pzielinski 142 źrodło rozwiń

Czasami nasz kod nie działa i chcielibyśmy sprawdzić jak działa dokładnie funkcja dostarczona przez .NET Framework. Oczywiście domyślnie nie możemy tego zrobić – po kliknięciu Step Into, przejdziemy po prostu do kolejnej metody. Poniższy opis dotyczy Visual Studio 2008, na którym testowałem i faktycznie działa to. Niestety wciąż mamy problemy z VS 2012 – w następnym wpisie postaram się dać jakiś update odnośnie 2012. W VS mamy coś takiego jak source server oraz możemy również ściągnąć symbols files dla...

Dziel się z innymi:
Piotr Zieliński » Debuggowanie .NET Framework

Narzędzia 4125 dni, 18 godzin, 53 minuty temu pzielinski 213 źrodło rozwiń

Przed przeczytaniem tego postu zachęcam do zapoznania się następującymi wpisami: 1. Typ dynamic w C# 4.0 2. Zastosowanie dynamic: ExpandoObject 3. Zastosowanie dynamic: DynamicObject ExpandoObject to przydatna czasami klasa, ale problem z nią taki, że nie można jej rozszerzać i nawet została oznaczona jako sealed. Aby skorzystać z klasy Gemini, najpierw należy zainstalować odpowiedni pakiet z NuGet: Zacznijmy od przykładu pokazującego, że faktycznie można po Gemini dziedziczyć:internalclass Progr...

Tagi: dynamic, gemini
Dziel się z innymi:
Piotr Zieliński » Klasa Gemini w C#

Sztuka programowania 4128 dni, 18 godzin, 18 minut temu pzielinski 332 źrodło rozwiń

Kolejna część artykułu o Enterprise Library i wykonywaniu logów: http://msdn.microsoft.com/pl-pl/library/enterprise-library-logging-application-block–czesc-2.aspx Zapraszam do lektury!Explore posts in the same categories:Ogólne, Patterns & Practices This entry was posted on Wednesday, August 21st, 2013 at 7:47 pm and is filed under Ogólne, Patterns & Practices. You can subscribe via RSS 2.0 feed to this post's comments. ...

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

Sztuka programowania 4131 dni, 16 godzin, 32 minuty temu pzielinski 111 źrodło rozwiń

Dzisiaj króciutki przykład:class ItemInfo

Tagi: static
Dziel się z innymi:
Piotr Zieliński  » Code review: statyczne pole w generycznej klasie

Sztuka programowania 4133 dni, 8 godzin, 40 minut temu pzielinski 230 źrodło rozwiń

Ostatnio potrzebowałem użyć Border z CornerRadius ustawionym na jakąś wartość, aby móc potem umieścić w środku inne kontrolki (np. obrazek). Moje pierwsze podejście było następujące: Niestety w taki sposób zawartość Border nie zostanie poprawnie przycięta i efekt jest następujący: Znalazłem na forum bardzo ciekawe rozwiązanie z użyciem OpacityMask. Najpierw kod a potem wyjaśnienie: Efekt: Aby zrozumieć powyższy kod należy najpierw wyjaśnić jak działa OpacityMask. OpacityMask to brush, który o...

Tagi: WPF
Dziel się z innymi:
Piotr Zieliński » WPF: Border, CornerRadius oraz przycinanie zawartości

Windows 4137 dni, 18 godzin, 13 minut temu pzielinski 123 źrodło rozwiń

W zdecydowanej większości przypadków jestem przeciwnikiem singleton’a i uważam to za anty-wzorzec. Dużo lepiej użyć IoC i przekazywać wszędzie w konstruktorach tą samą instancję. Istnieją jednak przypadki, w których użycie singleton’a nie jest brzydkie. Ostatnio miałem klasę, która potrzebowała pewnych danych – kolekcję prostych struktur. Każda struktura zawiera string i pole bool. Ze względu, że ta kolekcja musi być wykorzystana w kilku klasach, zdecydowałem się na przeniesienie jej do osobnej klasy (s...

Tagi: Singleton
Dziel się z innymi:
Piotr Zieliński » Singleton oraz WeakReference

Sztuka programowania 4140 dni, 19 godzin, 37 minut temu pzielinski 256 źrodło rozwiń

Dzisiejszy wpis dotyczy wszystkich klas, jednak zostanie on zaprezentowany na przykładzie ViewModel znanego z MVVM. W moim projekcie używam MVVM i dlatego jest to dla mnie naturalne. W poście zaprezentuje bardzo sztuczne przykłady, dlatego proszę nie skupiać się na nazewnictwie czy na zaprezentowanej funkcjonalności. Przedstawiony problem jest jednak bardzo częsty w realnych projektach i sam mam\miałem  z nim do czynienia w codziennej pracy. Powiedzmy, że napisaliśmy ViewModel prezentujący jakąś część ...

Tagi: IoC
Dziel się z innymi:
Piotr Zieliński » Code Review: IoC oraz zbyt wiele parametrów w konstruktorze

Sztuka programowania 4142 dni, 14 godzin, 50 minut temu pzielinski 284 źrodło rozwiń

Często można usłyszeć, że przypisania są zawsze bezpieczne w wielowątkowości i powinniśmy martwić się np. inkrementacją. Jest to prawda dla Int32 ale dla long już nie zawsze. Przykład:internalclass Program { privatestaticlong _x =0; privatestaticvoid Main(string[] args) { Task.Factory.StartNew(Task1); Task.Factory.StartNew(Task2); Thread.Sleep(5000); } privatestaticvoid Task2() { while (true) { Console.WriteLine(_x); } } privat...

Dziel się z innymi:
Piotr Zieliński » Code review: synchronizacja danych, przypisanie

Sztuka programowania 4145 dni, 17 godzin, 44 minuty temu pzielinski 137 źrodło rozwiń

W poprzednich wpisach omawialiśmy wewnętrzną implementację async\await. Dziś kolejne przykłady pokazujące, czego należy unikać aby optymalizować nasz kod. Jak wiemy, użycie await generuje masę kodu i niesie ze sobą alokację dodatkowych obiektów – maszyna stanów, wątki, wrappery itp. W zasadzie sama alokacja w .NET nie jest jakiś wielkim problemem i jest znacząco szybsza niż w językach niezarządzanych. Niestety, pomimo wielu optymalizacji dokonywanych przez GC, późniejsze ich zwolnienie jest czasochłonn...

Dziel się z innymi:
Piotr Zieliński » Async\Await–wydajność, część IV (buforowanie)

Sztuka programowania 4148 dni, 19 godzin, 39 minut temu pzielinski 117 źrodło rozwiń

Zacznijmy od synchronicznego kodu:internalclass Program { privatestaticvoid Main(string[] args) { ShortMethod1(); ShortMethod2(); ShortMethod3(); } privatestaticvoid ShortMethod1() { Console.WriteLine("1"); } privatestaticvoid ShortMethod2() { Console.WriteLine("2"); } privatestaticvoid ShortMethod3() { Console.WriteLine("3"); } } Mamy powyżej przykład 3 metod, które wykonują bardzo proste operacje. Nie są one zbyt skompl...

Dziel się z innymi:
Piotr Zieliński » Async\Await–wydajność, część III (grupuj operacje)

Sztuka programowania 4151 dni, 17 godzin, 54 minuty temu pzielinski 80 źrodło rozwiń

Zanim przejdziemy do pokazania przykładów jak optymalizować async\await najpierw trzeba zrozumieć implementację wewnętrzną w .NET. Bez tego ciężko będzie cokolwiek optymalizować. Na początku async\await wydawał mi się również czymś niezwykłym, a jak zacząłem zagłębiać się w kod IL, okazało się, że to bardzo prosty mechanizm i mógłby być napisany przez każdego z nas. Kod korzystający z async\await wygląda na synchroniczny. Pod spodem jednak są zwykłe callback’i – dokładnie tak jakby było to napisane w po...

Tagi: async, await
Dziel się z innymi:
Piotr Zieliński » Async\Await–wydajność, część II (implementacja wewnętrzna)

Sztuka programowania 4154 dni, 12 godzin, 16 minut temu pzielinski 163 źrodło rozwiń

W kolejnych kilku wpisach, zajmiemy się async\await ale od strony wydajnościowej. Jeśli ktoś nie wie do czego te słowa kluczowe służą, zachęcam przeczytać np. mój artykuł o programowaniu asynchronicznym w .NET 4.5. Sposób korzystania z async\await jest bardzo prosty. Do tego stopnia, że programowanie asynchroniczne wygląda w zasadzie tak jak synchroniczne podejście. W kodzie nie ma callback’ow a przepływ logiki wygląda na sekwencyjny. Niestety, trzeba być świadomym jakie pułapki czekają na programistów...

Tagi: async, await
Dziel się z innymi:
Piotr Zieliński » Async\Await–wydajność, część I

Sztuka programowania 4157 dni, 16 godzin, 43 minuty temu pzielinski 288 źrodło rozwiń

Dzisiaj na szybko wrócimy z powrotem do tematu TPL Data Flows. Jakiś czas temu pisałem o różnych blokach w TPL DataFlows. Nie opisałem jednak TransformManyBlock.  TransformManyBlock jest analogiczny do TransformBlock z tym, że na wyjściu jest kolekcja więc możliwe jest zwrócenie kilku wartości. TransformBlock służył wyłącznie do przetworzenia parametru i zwrócenia pojedynczego wyniku. Ktoś może zapytać, czy to nie to samo co przekazanie jako typu generycznego IEnumerable do TransformBlock – też wtedy na...

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

Sztuka programowania 4159 dni, 7 godzin, 40 minut temu pzielinski 47 źrodło rozwiń

W sprawie wydajności wyjątków można znaleźć wiele opinii, często sprzecznych ze sobą. W dzisiejszym wpisie przedstawię kilka programików, mających na celu, wyjaśnienie jaki wpływ mają wyjątki oraz ich łapanie na wydajność aplikacji. Zacznijmy od przykładów a potem przejdziemy do analizy wyników. Kod z wyrzucaniem wyjątków: internalclass Program { privatestaticvoid Main(string[] args) { constint n =20000; Stopwatch stopwatch = Stopwatch.StartNew(); for (int i =0; i < n;="" i+...

Dziel się z innymi:
Piotr Zieliński  » Wydajność: jak to jest z wyjątkami?

Sztuka programowania 4162 dni, 19 godzin, 24 minuty temu pzielinski 285 źrodło rozwiń

Visual Studio 2012 ma wsparcie dla nUnit. Wcześniej wspierał oficjalnie wyłącznie własne testy jednostkowe. Należy jednak najpierw zainstalować adapter. Wystarczy przejść do Tools –> Extensions and Updates –> Online –> Visual Studio Gallery –> Tools –> Testing i wybrać NUnit Test adapter: Po instalacji do dyspozycji mamy Test Explorer (VS): Najciekawszą chyba częścią jest możliwość sprawdzenia pokrycia kodu przez testy: Klikając na którąś z pozycji zostaniemy przekierowani bezpośrednio do kodu. ...

Piotr Zieliński  » NUnit w Visual Studio 2012 (pokrycie kodu)

Inne 4166 dni, 13 godzin, 26 minut temu pzielinski 205 źrodło rozwiń

Często spotykam następujące konstrukcje:class RiskInfo { publicint Condition{get;set;} publicdouble Score{get;set;} } Innymi słowy, kontener na kilka prostych zmiennych. Jeśli ktoś nie zna zasady działania Garbage Collector, gorąco zachęcam do przeczytania np. mojego cyklu artykułów o GC. Usunięcie obiektu z pamięci to nie prosta sprawa i naprawdę wiele musi zostać wykonanych operacji w tle. Z tego względu, jeśli klasa jest mała i posiada wiele instancji, wtedy dużo lepiej skonwertować ją do s...

Dziel się z innymi:
Piotr Zieliński » Code review: struktura danych

Sztuka programowania 4166 dni, 13 godzin, 26 minut temu pzielinski 235 źrodło rozwiń

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 4170 dni, 19 godzin, 56 minut temu pzielinski 252 źrodło rozwiń

1 2 3 4 5... 19 20

Najaktywniejsi w tym miesiącu