O finalizers czy też destruktorach pisałem już wielokrotnie. Wspomniałem również, że lepiej ich unikać, jeśli oczywiście to możliwe. Głównym problem jest możliwość wypromowania obiektu do kolejnych generacji, ponieważ obiekty z destruktorami są umieszczane w kolejce freachable, gdzie na nową stają się osiągalne. Jeśli ktoś nie pamięta, to polecam najpierw poczytanie o tym (w dziale articles są linki do moich tekstów o GC). Dzisiaj jednak chciałbym wspomnieć o czymś innym. Wiemy, że jeden wątek zwykle m...
Sztuka programowania 3839 dni, 7 godzin, 8 minut temu 158 źrodło rozwiń
W tym odcinku skupiam się na stanie aplikacji przed jakimikolwiek procesami “upiększającymi”. Aplikacja, którą mamy upiększyć, została do celów demonstracyjnych zbudowana dość nietypowo. Nie jest to web app, nie jest to nawet console app. Jest to jedna z...
Sztuka programowania 3853 dni, 16 godzin, 21 minut temu 231 źrodło rozwiń
Od pewnego czasu mam okazję budować system, którego część funkcjonalności dotyczy automatyzacji czynności administracyjnych związanych z zarządzaniem użytkownikami Active Directory. Jedną z takich czynności jest przełączanie skrzynek pocztowych Exchange 2007/2010 pomiędzy dwoma kontami użytkowników. W dzisiejszym wpisie pokażę, w jaki sposób zrealizować to zadanie wykorzystując Exchange Management Shell (EMS).
Dzisiaj przyjrzymy się słowu kluczowemu var w C#. Słowo dodane wraz z premierą framework’a .NET 3.5 stało się jednym z najbardziej nadużywanych przez programistów.
Sztuka programowania 3868 dni, 2 godziny, 42 minuty temu 304 źrodło rozwiń
Usually when we need to retrieve data from database server, we write code which looks like that using (var session = DataAccesLayer.Instance.OpenSession()) { using (var transaction = session.BeginTransaction()) { var projects = session.QueryOver
Bohaterem dzisiejszego odcinka jest prosta, jednak bardzo użyteczna, i jak się okazuje chyba mało znana metoda jednej z klas dostępnych w .NET Framework już od wersji 1.1.
Sztuka programowania 3888 dni, 17 godzin, 33 minuty temu 533 źrodło rozwiń
Dzisiaj całkowicie o podstawach ale jednak warto przypomnieć sobie słownictwo. Każdy kojarzy chyba wzorzec factory. Oficjalnie wyróżnia się jednak kilka typów tego wzorca. Najpopularniejsze z nich to Factory method oraz Abstract Factory. W podręczniku do wzorców projektowych, znajdziemy je jako dwie osobne konstrukcje. Czy to naprawdę tak ważne, aby znać różnice w nazewnictwie? Wzorce projektowe traktuję jako słownictwo. Zamiast wyjaśniać drugiej osobie, dokładnie co chcę napisać, używam wzorców projek...
Sztuka programowania 3895 dni, 8 godzin, 17 minut temu 245 źrodło rozwiń
W jednym z tworzonych przeze mnie systemów pojawiła się konieczność dodania funkcjonalności pozwalającej na odblokowywanie kont użytkowników w Active Directory (zablokowanych na skutek kilkukrotnego podania błędnego hasła). Standardowa procedura odblokowania konta to wejście do konsoli Active Directory i zaznaczenie odpowiedniej opcji w ustawieniach danego użytkownika...
Powiedzmy, że potrzebujemy wyciągnąć PostCode użytkownika (a po drodze mamy jeszcze Address): string postCode = person.Address.PostCode.ToString(); Nie mamy pewności czy person nie jest nullem, a następnie czy person.Address nie jest nullem, a następnie person.Address.PostCode … . Aby się zabezpieczyć przed NullReferenceException musimy napisać trochę dodatkowego kodu, jak np: ...
Od jakiegoś czasu nosiłem się z zamiarem rozpoczęcia na tym blogu jakiegoś cyklu wpisów – od czasu kiedy popełniłem serię wpisów przygotowujących do egzaminu MCSD: 70-480 minęło już trochę czasu… Zastanawiałem się trochę nad tematem i ostatecznie postanowiłem, że będzie to implementacja różnych wzorców projektowych w C#. Wiem, wiem… Temat wzorców jest dość podstawowy, jednak moim zdaniem fajnie będzie zebrać je wszystkie w jednym miejscu, a przy okazji uporządkować sobie trochę wiedzę na ich temat. Posta...
Sztuka programowania 3910 dni, 2 godziny, 47 minut temu 435 źrodło rozwiń
There are a lot of discussions in the Internet about the sense of testing the code with private accessors. In my opinion all of the discussions coming from the wrong understanding of the topic. What is unit testing? It is a testing of units, not classes, not methods exposed by some API. The term private is supposed to be private to the consumer, not to unit tests. Let's have a look at it closer..
Sztuka programowania 3911 dni, 3 godziny, 54 minuty temu 117 źrodło rozwiń
In my pervious post I described basic multithreading constructs in C#. Now, I would like to compare them to conforming constructs in Java. It might be useful for those of you, who has already created some multithreaded applications in Java, and would like to learn how to do the same in C#.
Sztuka programowania 3912 dni, 18 godzin, 33 minuty temu 207 źrodło rozwiń
Extension Methods – metody rozszerzające, które pozwalają na wykorzystanie raz napisanego kodu w wielu miejscach bez naginania zasady DRY (Don’t Repeat Yourself). Metoda taka musi być statyczna...
Sztuka programowania 3917 dni, 11 godzin, 58 minut temu 238 źrodło rozwiń
Najprościej definiując problem: Czy mamy tylko jeden return z metody, czy też mamy ich kilka w różnych miejscach. Mówię też o metodach, które nie zwracają wartości. Metodę void też można skończyć wcześniej...
Sztuka programowania 3917 dni, 11 godzin, 58 minut temu 229 źrodło rozwiń
Najczęściej programiści korzystają z klasy Dictionary ale warto rozważyć dwie inne kolekcje. ListDictionary przechowuje dane na liście jednokierunkowej. Dla słowników z kilkoma kluczami zwykle jest to szybsze niż standardowy hash table, wykorzystywany w Dictionary. Szybciej jest po prostu przejść przez 10 elementów, niż liczyć skomplikowaną funkcję haszującą.
Dzisiejszy wpis o książkach, z których miałem okazję korzystać w ciągu ostatnich 12 miesięcy. Niektóre pozycje są warte polecenia, inne mniej, a niektóre w ogóle. Z książkami jest jeden podstawowy problem – bardzo szybko się starzeją...
Czytając jeden z ostatnich postów u Maćka zauważyłem, że w komentarzach pojawiła się krótka wymiana opinii na temat wyboru “właściwego” podejścia w kontekście korzystania z Entity Framework. Sam miałem okazję używać każdego z podejść oferowanych przez EF i z biegiem czasu zacząłem dostrzegać plusy i minusy poszczególnych podejść. W tym poście postanowiłem zebrać moje przemyślenia na ten temat.
.NET zawiera klasy przeznaczone do leniwej inicjalizacji i zwykle nie trzeba samemu implementować tego wzorca. Jeśli jakiś obiekt, chcemy inicjalizować dopiero w momencie, gdy jest on potrzebny to można skorzystać ze wspomnianych typów.
This post is a part of preparation for 70-483 exam. Information written down here refers to the part Manage program flow. Last time I wrote about the Thread class which allows you to run the code concurrently. Today I will show an another part of the System.Threading namespace, the ThreadPool class.
Programowanie rozproszone 3922 dni, 12 godzin, 21 minut temu 53 źrodło rozwiń