W dzisiejszym wpisie zajmę się tematem łączenia kolekcji obiektów przy użyciu mechanizmów dostępnych w LINQ. Pokażę przykłady zastosowań metod Concat, Union, Intersect, Except oraz klauzuli Join (zarówno dla złączeń wewnętrznych jak i zewnętrznych). Dla każdego przykładu złączenia kolekcji przedstawię analogiczny sposób łączenia zbiorów danych w języku SQL.
Dziś jak obiecałem, praktyczny przykład wykorzystania WeakReference ( o który mowa była kilka postów wcześniej). Zdarzenia są częstym powodem memory leak. Na przykład:publicclass ReportViewModel { publicvoid Init(EmployeesViewModel employeesVm) { employeesVm.PropertyChanged+=EmployeesPropertyChanged; } privatevoid EmployeesPropertyChanged(object sender,EventArgs e) { // logika } } Następnie gdzieś w kodzie tworzymy ReportViewModel, wykonujemy jakieś operację i u...
In this post I’m going to show you how to diagnose SQL exceptions using memory dumps. Imagine you have a web application deployed on a production server. Your application is using Elmah configured to log all exceptions to a dedicated table. One day you receive information that users are unable to make orders and in the Elmah log there are lots of SqlTypeExceptions: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 1...
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 W zeszłym miesiącu pytałem Was o preferencje jeśli chodzi o białe znaki (whitespaces) w swoim ulubionym IDE. Pora rzucić okiem na wyniki i tak:Blisko 200 osób oddało swój głos – nie spodziewałem się takiego dużego odzewu, cieszy mnie to bardzo (cieszy odzew a nie zdziwienie)
When working with applications that utilize lots of threads and those threads arent particularry long running we can stumble upon a problem that we may lose most of the processing time for thread context switches, so it would be desirable to do all of the processing on a limited number of threads, usualy this can be done using a queue of delegates that each thread will process, but sometimes we cannot have that and still w...
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...
Jeśli jeszcze nie jesteś przekonany do potrzeby profesjonalizmu to najwyższa pora zapoznać się z poniższym wywiadem z Robertem C. Martinem. A jeśli nie wiesz kim jest Robert C. Martin to najwyższa pora zapoznać się z jego opiniami na temat programowania, TDD i profesjonalizmu w programowaniu.
Windows 8 Release Preview–wrażenia Pod koniec zeszłego tyg. Microsoft udostępnił nam nową wersję Windows 8 oznaczoną jako Release Preview. Jest to wersja która nie równi się za mocno od finalnej. Oznacza to nie mniej nie więcej że to co widzimy nie różnić się będzie mocno od wersji finalnej. Przejdźmy więc do wrażeń jakie mam po instalacji nowego systemu.Częściowe spolszczenie Podstawowe aplikacje metro są spolszczone między innymi: Zdjęcia, Muzyka, Poczta, Kalendarz. SkyDrive to jedna z aplik...
Dla tych, którzy są zainteresowani Windows 8 oraz nowym API IO w WinRT: http://msdn.microsoft.com/pl-pl/library/obsluga-operacji-na-plikach-w-winrt.aspx
W dzisiejszym wpisie zajmę się tematem śledzenia zmian i kontroli danych w obiekcie DataTable. Jest to możliwe dzięki temu, że wiersze tabeli będące obiektami typu DataRow przechowują informacje o swoich wersjach. Obiekty DataRow posiadają także szereg metod związanych z modyfikacją danych, a co za tym idzie ze zmianą ich wersji.
Zgodnie z obietnicą przedstawię parę moich pierwszych wrażeń po zainstalowaniu i krótkiej zabawie z Windows 8 Release Candidate.
Warsaw CodeCamp 2012 Każdego kto w najbliższą sobotę będzie w Warszawie zapraszam na wydarzenie organizowane przez Warsaw Official .Net User Group. Tematyka przewodnią wydarzenia będzie porównanie Windows Phone z Windows 8 ale również będzie o grach a także asynchroniczność wchodząca w Windows 8. Szczegóły wydarzenia znajdziecie na jego stronie. REJESTRACJA: Wydarzenie jest darmowe, ale wymagana jest rejestracja. Każdy zarejestrowany użytkownik to większe wsparcie dla organizat...
Na dobrą sprawę notka powinna kończyć się na krótkim stwierdzeniu: do zrzutów procesów należy używać tylko aplikacji o tej samej 'bitowości', co zrzucana aplikacja. Nie byłbym jednak sobą, gdybym nie postanowił przyjrzeć się nieco bliżej problemowi. W systemie 64-bitowym wszystkie procesy są 64-bitowe. Kropka. Aplikacje 32-bitowe uruchomione są w trybie emulacji w ramach WOW64, jednak dla systemu dalej są to procesy 64-bitowe, choć z pewnymi rozszerzeniami związanymi z architekturą - a więc dodatkowymi ...
Dziś krótki post o ciekawej konwersji, która ma miejsce podczas przekazywania delegat. Rozważmy kod
Spacje czy tab-y lub tabulatory do wciec. Nad tym pytaniem zmarnowano wiele energii. Sprawdźmy zatem jakie są wasze preferencje w tej materii. Zapraszam do ankiety a za kilka dni sprawdzimy co z tego wyszło
Na platformie .NET od wersji 3.5 dostępna jest technologia LINQ oferująca uniwersalny mechanizm zadawania zapytań do obiektów. W tym wpisie pokażę w jaki sposób przy użyciu LINQ to XML przenieść dane z kolekcji obiektów do dokumentu XML, wczytać dane z pliku XML do kolekcji oraz zmodyfikować zawartość XML-a.
W .NET istnieje wiele sposobów synchronizacji pracy wątków. O dużej części z nich pisałem już na blogu (z ciekawszych np. klasa Barrier ). Najpopularniejszym i najłatwiejszym sposobem jest użycie słowa kluczowego lock. W wielu przypadkach jest to najlepszy i najbezpieczniejszy wybór. SpinLock to zupełnie inne podejście. W przypadku lock, wątek jest usypiany i budzony gdy przyjdzie na niego kolej. Ma to kilka poważnych wad. Wiążą się one z szeregowaniem oraz zmianą kontekstu. Zmiana kontekstu jest dość c...
W .NET 4.0 wprowadzoną klasę Tuple służącą do owijania kilku wartości w jeden obiekt. Tuple to nic innego jak obiekt zawierający w sobie jakieś dane w postaci właściwości. Do dyspozycji jest 8 statycznych metod służących do stworzenia Tuple:Create(T1)Create(T1,T2)Create(T1,T2,T3)Create(T1,T2,T3,T4)Create(T1,T2,T3,T4,T5)Create(T1,T2,T3,T4,T5,T6)Create(T1,T2,T3,T4,T5,T6,T7)Create(T1,T2,T3,T4,T5,T6,T7,T8) Ponadto istnieje możliwość stworzenia tuple za pomocą jednego z konstruktorów:Tuple