Strona głównaUżytkownik

pzielinski | użytkownik

pzielinski
pzielinski
27 178,29
3895 dni, 4 godziny, 8 minut temu
21 lutego, 2010
dotnetomaniak.pl

Wbudowany mechanizm optymalizacji może czasami przynieść zaskakujące wyniki. Rozważmy poniższy fragment kodu:string var1 ="text"; string var2 ="text"; bool condition =object.ReferenceEquals(var1, var2); Wydawałoby się, że var1 i var2 stanowią dwie osobne referencje. Po uruchomieniu kodu przekonamy się jednak, że zmienna condition będzie miała wartość true. Spowodowane jest to wykonaną optymalizacją, polegającą na tym, że .NET przechowuje zbiór użytych w programie napisów. Deklarując  zmienną przec...

Dziel się z innymi:
Piotr Zieliński  » Blog Archive » Optymalizacja klasy String

Inne 4534 dni, 14 godzin, 22 minuty temu pzielinski 252 źrodło rozwiń

NULL Object Pattern (Special Case)

Dziel się z innymi:
NULL Object Pattern (Special Case)

Architektura 4536 dni, 18 godzin, 58 minut temu pzielinski 185 źrodło rozwiń

W kodzie często używamy klasy Stirng do przechowywania poufnych informacji takich jak np. hasło. Niestety często nie zdajemy sobie sprawy jak niebezpieczne jest takie rozwiązanie. String jest specjalnie zoptymalizowaną klasą przeznaczoną do przechowywania łańcucha znaków, która jednak nie jest odporna na wszelkie ataki związane z podglądaniem pamięci operacyjnej. W skrócie pisząc, wszelkie informacje klasa String trzyma w postaci jawnej. Korzystając więc z odpowiedniego oprogramowania, intruz może bez pr...

Tagi: securestring
Dziel się z innymi:
Piotr Zieliński » Przechowywanie poufnych informacji

Architektura 4536 dni, 18 godzin, 58 minut temu pzielinski 312 źrodło rozwiń

Z klasami częściowymi większość programistów c# prawdopodobnie miała już styczność. Klasycznym przykładem jest rozbicie klasy Form na część wygenerowaną przez Visual Studio oraz na część przeznaczoną do modyfikacji przez programistę. Metody częściowe są bardzo podobnym mechanizmem. W skrócie są to metody, które można definiować w dwóch różnych plikach. Zdecydowałem się o nich napisać ponieważ wydaje mi się, że są mniej znane, a czasami mogą okazać się przydatne. Sama deklaracja jest analogiczna do klas ...

Dziel się z innymi:
Piotr Zieliński » Metody częściowe(partial methods)

Inne 4539 dni, 19 godzin, 34 minuty temu pzielinski 139 źrodło rozwiń

Na blogu oraz MSDN pisałem niejednokrotnie o testach jednostkowych oraz integracyjnych. Ostatnio jednak zastanawiałem się nad podstawowym problemem – jak zorganizować to od strony struktury katalogowej? Musimy rozważyć następujące problemy:Testy powinny być w każdej chwili dostępnie do odpalenia i weryfikacji.Wykonując prostą refaktoryzację (zmiana nazwy klasy), automatycznie nazwa powinna zaktualizować się w testach.Testy jednostkowe stanowią dobrą dokumentację oraz instrukcję używania zaimplementowanej...

Tagi: testy, unit-tests
Dziel się z innymi:
Piotr Zieliński » Testy jednostkowe–struktura folderów

Inne 4539 dni, 3 godziny, 28 minut temu pzielinski 114 źrodło rozwiń

Aby móc korzystać z rozszerzeń RX należy najpierw je pobrać i zainstalować. Przed przeczytaniem tego posta, koniecznie należy zapoznać się z interfejsami IObservable oraz IObserver – prezentowałem je w ostatnim wpisie. Po instalacji dodajemy referencję do System.Reactive:   RX dodaje metodę ToObservable konwertującą kolekcję do IObservable, interfejsu który wspiera wzorzec obserwator. Napiszmy przykładowy obserwator:class SampleObserver : IObserver

Tagi: Rx
Dziel się z innymi:
Piotr Zieliński » Reactive Extensions I – instalacja oraz kolekcje danych

Programowanie rozproszone 4542 dni, 18 godzin, 4 minuty temu pzielinski 115 źrodło rozwiń

Poprawnie zaprojektowana aplikacja powinna weryfikować dane w każdej warstwie systemu. Oczywiście najważniejszym miejscem jest warstwa biznesowa ale dobrym zwyczajem jest walidacja również w warstwie prezentacji. W idealnym interfejsie użytkownik nie jest w stanie wprowadzić błędnych danych. Podstawowym przykładem są pola edycyjne w których powinno się wpisać np. ilość sprzedanego produktu. Użytkownik nie powinien mieć możliwości wprowadzenia tekstu w takie pole. Zacznijmy od prostej sprawy – akceptacja...

Tagi: weryfikacja
Dziel się z innymi:
Piotr Zieliński » IntTextBox oraz RealTextBox w WPF

Windows 4543 dni, 12 godzin, 35 minut temu pzielinski 81 źrodło rozwiń

W przyszłych postach chcę zająć się Reactive Extensions, jednak zanim zacznę cykl postów o tym, najpierw przedstawię dwa interfejsy wprowadzone w .NET 4.0. Interfejsy umożliwiają implementację wzorca obserwator. IObserver powinien zostać zaimplementowany dla klasy, która chcę być powiadamiana o zmianach dokonywanych na klasie implementującej IObservable. Przyjrzyjmy się najpierw metodom IObserver:OnCompleted – obserwacja wszelkich zmian zakończona.OnError – wystąpił błąd.OnNext – Nowa zmiana np. dodano e...

Dziel się z innymi:
Piotr Zieliński » Interfejsy IObservable oraz IObserver

Inne 4539 dni, 18 godzin, 42 minuty temu pzielinski 209 źrodło rozwiń

W języku c# obiekt, którego zasobami chcemy sami zarządzać, powinien implementować interfejs IDisposable. Sporo osób aby zwolnić zasoby pisze następujący kod:publicclass MyClass : IDisposable { #region IDisposable Memberspublicvoid Dispose() { // zwalnianie zasobow } #endregion } Interfejs niestety wymusza nam tylko implementację metody Dispose. Powyższe rozwiązanie jest zdecydowanie nieprawidłowe. Zanim  jednak przejdę do omawia co w kodzie jest niepoprawnego, podam prawidłową ...

Tagi: dispose, zasoby
Dziel się z innymi:
Piotr Zieliński » Prawidłowe zwalnianie zasobów

Inne 4543 dni, 3 godziny, 31 minut temu pzielinski 339 źrodło rozwiń

Czasami typ ENUM znajduje zastosowanie(czasami ponieważ często ogranicza on modułowość aplikacji). W wielu przypadkach potrzebujemy jednak skojarzyć pewien opis z każdą wartością enum’a. Jako praktyczny scenariusz można wymienić implementację menedżera dźwięków. Dla przykładu w pewnej grze, którą współtworzyłem aby uatrakcyjnić interfejs dla programisty zdefiniowałem sobie typ enumeryczny SOUNDTYPE:publicenum SOUNDTYPE { ROCKETLAUNCH, MACHINEGUN_LAUNCH } Programista zatem chcąc wykorzystać d...

Tagi: Enum
Dziel się z innymi:
Piotr Zieliński » Jak dodać opis wartości ENUM?

Inne 4546 dni, 9 godzin, 51 minut temu pzielinski 362 źrodło rozwiń

Słowo lock służy do synchronizacji  kodu między wątkami. Często jednak przeglądając kod widzę niepoprawne użycie. Rozważmy następujący przykład:publicclass OrderManager { publicvoid Submit() { lock(this) { //... } } } Przedstawiona konstrukcja może spowodować wiele trudnych do wykrycia problemów. Co jeśli użytkownik naszej biblioteki również wykorzysta źle lock i napisze:OrderManager orderManager=new OrderManager(); //...lock(orderManager) { orderManage...

Tagi: lock
Dziel się z innymi:
Piotr Zieliński » Jak nie używać blokad lock

Programowanie rozproszone 4546 dni, 11 godzin, 42 minuty temu pzielinski 223 źrodło rozwiń

Domyślne wartości bardzo łatwo ustawić za pomocą wizualnego edytora EntityFramework. Wystarczy ustawić właściwość Default w oknie properties: Co jednak gdy chcemy ustawić wartość wyliczoną na podstawie jakieś funkcji? Dla przykładu może być to DateTime.Now bądź też Guid.NewGuid()?Wpisując w te same okienko dostaniemy błąd podczas kompilacji: Error 1 Error 54: Default value (System.Guid.NewGuid()) is not valid for GUID. The value must be enclosed in single quotes in the form 'dddddddd-dddd-dddd-ddd...

Dziel się z innymi:
Piotr Zieliński » EntityFramework i wartość domyślna wyliczana na podstawie funkcji

Bazy danych i XML 4546 dni, 11 godzin, 42 minuty temu pzielinski 197 źrodło rozwiń

Programując własne biblioteki, często potrzebujemy zdefiniować własny typ wyjątku. Przeglądając różnego rodzaju kody źródłowe nierzadko spotykam błędną deklarację własnych wyjątków:publicclass MyException : Exception { // specyfikacja } Co prawa kompilator nie zgłosi błędu ale już np. CodeAnalysis zwróci nam uwagę o błędnej deklaracji. Najprościej korzystać w Visual Studio z tzw. snippet’ów czyli gotowych fragmentów kodu. Naciskając klawisze ctrl+space pojawi nam się lista dostępnych snippetów w VS...

Tagi: wyjątki
Dziel się z innymi:
Piotr Zieliński » Prawidłowe definiowanie wyjątków w c#

Inne 4546 dni, 15 godzin, 51 minut temu pzielinski 369 źrodło rozwiń

O wielowątkowości pisałem już niejednokrotnie. Niestety w żadnym z moich postów, nie wyjaśniłem podstawowych pojęć związanych z współbieżnością. Oczywiście jeśli wykorzystujemy wątki do prostych zadań typu asynchroniczne połączenie z usługą, poważniejszych problemów nie doświadczymy. W przypadku jednak nieco bardziej zaawansowanych algorytmów, musimy zawsze badać nasz kod pod kątem: 1. Zakleszczenie (deadlock) – występuję gdy wątek A czeka aż wątek B skończy swoją operację a wątek B czeka aż wątek A zako...

Dziel się z innymi:
Piotr Zieliński » Wielowątkowość: podstawowe pojęcia – deadlock, livelock, starvation.

Inne 4546 dni, 15 godzin, 51 minut temu pzielinski 378 źrodło rozwiń

Na różnych forach często użytkownicy mają problem z aktualizacją kontrolek z innego wątku. Załóżmy, że odpaliliśmy sobie BackgroundWorker lub po prostu Thread. Wykonujemy jakieś operację, np. łączymy się ze zdalnymi zasobami. Stworzenie osobnego wątku w takim scenariuszu jest bardzo pożądane ponieważ nie blokujemy wtedy aktualizacji interfejsu. W trakcie pobierania informacji z Internetu chcemy aktualizować interfejs aby informować użytkownika o postępach np.progressBar.Value = progessValue; Jeśli powyż...

Dziel się z innymi:
Piotr Zieliński » Aktualizacja interfejsu z drugiego wątku(windows forms i WPF)

Windows 4547 dni, 5 godzin, 52 minuty temu pzielinski 407 źrodło rozwiń

Na pierwszy rzut oka, TextBlock oraz Label są bardzo podobne. Obydwie kontrolki(?)  wyświetlają tekst. Różnice są jednak spore i postaram się je wyjaśnić. Sprawdźmy co następujący kod wyświetli: Kontrolka Label jest lekko przesunięta w prawo. Jest to spowodowane faktem, że Padding dla Label domyślnie ma wartość 5. W przypadku TextBlock jest to 0, dlatego też na powyższym screenie TextBlock przylega do krawędzi. Ustawmy IsEnabled StackPanel’a na false i sprawdźmy jak zachowają się kontrolki: Lab...

Tagi: Label, TextBlock
Dziel się z innymi:
Piotr Zieliński » WPF: TextBlock vs. Label

Windows 4551 dni, 2 godziny, 49 minut temu pzielinski 164 źrodło rozwiń

Często musimy implementować interfejs INotifyPropertyChanged. Szczególnie w przypadku wykorzystania wzorca MVVM oraz WPF. Najczęściej programiści wykorzystują podstawową implementację i przekazują nazwę parametru jako czysty string np:if(PropertyChanged!=null) { PropertyChanged(this,new PropertyChangedEventArgs("propName")); } Wszystko działa bardzo dobrze, dopóki nie zmienimy nazwy właściwości. Przede wszystkim należy wtedy pamiętać o zaktualizowaniu wszystkich wywołań ProperyChanged. Nie możemy po...

Dziel się z innymi:
Piotr Zieliński » PropertyChanged bez przekazywania string’a

Windows 4552 dni, 15 godzin, 3 minuty temu pzielinski 470 źrodło rozwiń

Ostatnio napotkałem problem stworzenia menu zawierającego zarówno dynamiczne elementy (binding) jak i statyczne. Okazało się, że wcale nie jest to takie proste jak to jest w przypadku większości rzeczy w WPF. Zacznijmy jednak od przedstawienia sposobów tworzenia menu w WPF. Pierwszy to oczywiste statyczne menu, w całości zdefiniowane w XAML: W powyższym kodzie nie ma nic nadzwyczajnego. Sytuacja jest również łatwa gdy chcemy w całości zdefiniować menu jako dynamiczne: Gdzie pojedynczy item to:publiccl...

Tagi: menu
Dziel się z innymi:
Piotr Zieliński » WPF, dynamiczne i statyczne menu

Windows 4556 dni, 19 godzin, 51 minut temu pzielinski 194 źrodło rozwiń

Dzisiaj króciutki post. Wchodząc we właściwości projektu jako Target Platform można zauważyć .NET Framework 4 Client profile oraz .NET Framework 4. Jaka jest różnica? Client profile to taka mocno uproszczona wersja .NET framework przeznaczona dla aplikacji klienckich. Dzięki temu użytkownik nie musi instalować pełnego .NET Framework a uproszczony i mniej ważący Microsoft .NET Framework 4 Client Profile. Wersja kliencka zawiera między innymi wsparcie dla WPF, WCF, WWF, Entity Framework, Linq To SQL, MEF. ...

Dziel się z innymi:
Piotr Zieliński » .NET Framework 4 Client Profile vs .NET Framework 4

Inne 4560 dni, 4 godziny, 9 minut temu pzielinski 273 źrodło rozwiń

Code Contracts stanowią kolejny mechanizm ułatwiający programowanie defensywne – sposób wytwarzania oprogramowania odporny na wszelkie niespodziewane wartości (NULL, dzielenie przez zero, wartości skrajne itd.) Rozważmy klasyczny przykład – funkcja dzielenia:privatefloat Divide(float dividend, float divisor) { if (divisor ==0) thrownew DivideByZeroException(); return dividend / divisor; } Funkcja jest zaimplementowana poprawnie – sprawdza czy divisor nie jest zerem. Są jeszcze inne skra...

Piotr Zieliński » Code Contracts–programowanie defensywne

Architektura 4563 dni, 6 godzin, 25 minut temu pzielinski 240 źrodło rozwiń

1 2... 10 11 12 13 14 15... 19 20

Najaktywniejsi w tym miesiącu