W Debug->Exceptions->Common Language Runtime Exceptions można zaznaczyć, które wyjątki będą rzucane zawsze, a które czasem przechwyci Visual Studio
Strona głównaUżytkownik
kocon | użytkownik
Komenda preprocesora #if DEBUG i problemy z utrzymaniem (rename).
Architektura 4597 dni, 15 godzin, 32 minuty temu 183 źrodło rozwiń
Uhu, dawno nie pisałem. Już już, nie płaczcie. Dlaczego warto rozmawiać, pytać, poprawiać i pokazać komuś swój kod? Najtrudniej jest znaleźć swoje błędy, trudno jest spojrzeć na swój kod i zapytać się "czemu zrobiłem to tak - a nie w inny sposób?". Skoro wszystko działa tak jak założyłem na początku to znaczy, że jest dobrze i refaktoryzacja jest nie potrzebna. Jeśli się uruchamia, działa i nie wywala to po co mi napisać testy. I w końcu skoro się tyle namęczyłem na tym wszystkich, użyłem całej swojej...
Wielu programistów i firm z branży IT często mówi, że potrafi wytwarzać oprogramowanie wysokiej jakości i że bardzo ważnym jest, aby o tą jakość zabiegać. Nie ma w tym nic dziwnego – wszyscy jesteśmy gotowi zgodzić się, że jakość powinna być możliwie wysoka. Problem pojawia się jednak w momencie, gdy trzeba doprecyzować pojęcia.
Architektura 4575 dni, 19 godzin, 23 minuty temu 259 ź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...
Architektura 4573 dni, 16 godzin, 27 minut temu 313 źrodło rozwiń
Posted by slanto on Zastosowanie wzorca Decorator na przykładzie produktu i ofert specjalnych. Wzorzec ten pozwala nam na dynamiczną zmianę/rozszerzanie zachowania istniejących klas.
Architektura 4567 dni, 8 godzin, 18 minut temu 290 źrodło rozwiń
Dziś krótki post o ciekawej konwersji, która ma miejsce podczas przekazywania delegat. Rozważmy kod
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()...
Sztuka programowania 4557 dni, 19 godzin, 26 minut temu 266 ź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 ...
Sztuka programowania 4538 dni, 9 godzin, 53 minuty temu 163 źrodło rozwiń
Dziś kolejny post o kolekcjach, które mogą być używanie swobodnie w środowisku współbieżnym. Tak jak ConcurrentBag, obiekty przedstawione w tym poście również są mocno zoptymalizowane. ConcurrentQueue to po prostu kolejka.
Programowanie rozproszone 4535 dni, 9 godzin, 21 minut temu 121 źrodło rozwiń
W dzisiejszym poście kolejna thread-safe kolekcja – słownik danych. Jeśli musimy modyfikować słownik z kilku wątków naraz wtedy ConcurrentDictionary stanowi doskonały wybór. W przypadku gdy chcemy raz uzupełnić słownik a potem tylko czytać z niego dane, wtedy oczywiście nie ma potrzeby wykorzystywania ConcurrentDictionary. Zacznijmy od spisu najważniejszych metod:TryAdd – dodawanie nowego elementu. TryUpdate – aktualizacja wpisu. TryRemove – usuwanie klucza i wartości. AddOrUpdate – ciekawy twór. Za jedn...
W najnowszej wersji SQL Server język T-SQL wzbogacony został o kilka nowych funkcji analitycznych. Są to tzw. funkcje okienkowe operujące na podzbiorach (oknach danych tworzonych klauzulą OVER) głównego zbioru zwróconego przez zapytanie. Zanim przejdę do omówienia wspomnianych funkcji pokażę co zmieniło się w samym poleceniu OVER.
Bazy danych i XML 4524 dni, 8 godzin, 33 minuty temu 249 źrodło rozwiń
Opublikowano We wpisie o pokryciu kodu (Code Coverage) napisałem: Należy pamiętać, że to są narzędzia dla programisty Co przez to rozumiem? Code Coverage nie może być używany przez kierownictwo/zarząd/management/etc – a już pod żadnym pozorem nie może być związany finansowo z wypłatą programisty. Dlaczego? Przyciśnięty programista może bardzo łatwo wygenerować dowolne pokrycie kodu i to przy dosyć małej ilości pracy. Pisząc odpowiednią ilość testów jednostkowych bez asercji można uzyskać 100% pokryci...
Kompilacja to właściwie nic innego jak tłumaczenie z jednego języka na drugi. W przypadku C# (a dokładniej .net-a) to tłumaczenie odbywa się dwa razy. Raz z języka czytelnego dla kompilatorów aminokwasowych (c#) na MSIL czyli na taki w dużym uproszczeniu zarządzalny asembler (zrozumiały przez rzadko którego białkowca) a drugi raz z owego MSIL do takiego już prawdziwego kodu maszynowego, który jest zrozumiały dla krzemiaków. Każdy program w C# może mieć praktycznie nieskończenie wiele wers...
Opublikowano Co to jest CodeCoverage? Jest to pokrycie kolejnych linii kodu testami jednostkowymi. Metryka ta pokazuje ile procent linijek kodu ma przynajmniej jeden test jednostkowy, który ją wykonuje. Sprawa wydaje się prosta, tyle tylko, że w świecie .neta kod kompiluje się do… no właśnie do kodu pośredniego. Dopiero ten kod pośredni jest kompilowany w razie potrzeby do kodu maszynowego. Co więcej o ile nie wprowadzamy zmian do kodu źródłowego, to źródła się nie zmieniają ale już kod kompilowany może...
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...
Sztuka programowania 4524 dni, 19 godzin, 27 minut temu 322 źrodło rozwiń