Prosty wzorzec, jak tworzyć kontekst aplikacji z obiektami ładującymi się tylko w razie potrzeby.
Sztuka programowania 3416 dni, 9 godzin, 9 minut temu 296 źrodło rozwiń
.NET Micro Framework to framework z rodziny .NET służący do oprogramowywania systemów typu embedded z ograniczonymi zasobami pamięci. Minimalne wymagania to 256 kB pamięci flash oraz 64 kB pamięci RAM. .NET Micro to taki młodszy brat .NET Framework z bardzo okrojonym BCL, WPF i WCF (wersja 4.x). Jeżeli programowałeś wcześniej w “pełnym dotnecie”, przesiadka na Micro może okazać się szokiem. Niby to ten sam C#, jednak braki w BCL (wynikające z ograniczeń platformy sprzętowej) szybko dają się we znaki.
Sztuka programowania 3416 dni, 9 godzin, 9 minut temu 128 źrodło rozwiń
W ostatnich postach przedstawiałem różne scenariusze użycia PLINQ. Ze względu na zrównoleglenie przetwarzania, kolejność na wyjściu nie zawsze będzie taka sama. Najlepiej to rozważyć na przykładzie:int[] numbers = Enumerable.Range(1, 50).ToArray(); foreach(int number in numbers.AsParallel().Where(n=>n>2)) { Console.WriteLine(number); } W scenariuszu sekwencyjnym, spodziewalibyśmy się liczb z zakresu 3-50. Skoro sekwencja wejściowa ma uporządkowane liczby od 1-50 to po wykonaniu zapytania oczekujemy p...
Sztuka programowania 3423 dni, 9 godzin, 49 minut temu 118 źrodło rozwiń
Kawał dobrego materiału dla wszystkich, którzy chcą pogłębić i/lub usystematyzować swoją wiedzę dotyczącą TDD (ang. Test Driven Development) przygotował Roy Osherove. Kim jest Roy? Większość pewnie wie, że ...
Sztuka programowania 3425 dni, 23 godziny, 34 minuty temu 215 źrodło rozwiń
W ostatnim poście omówiłem podstawy PLINQ. Dzisiaj już czysta praktyka. Zacznijmy od prostego zapytania, które może zostać wykonane równolegle:internalstaticclass Sample { publicstaticvoid Main() { IEnumerable
Sztuka programowania 3426 dni, 19 godzin, 31 minut temu 121 źrodło rozwiń
Wpis przedstawia sposób stworzenia i użycia AttachedProperties, w celu rozszerzenia funkcjonalności istniejących już komponentów. Problem bindingu do ActualWidth oraz ActualHeight zostanie rozwiązany. Szczególnie przydatne podczas pisania aplikacji modern!
Sztuka programowania 3426 dni, 19 godzin, 31 minut temu 175 źrodło rozwiń
20.03.2013 Średnio raz w miesiącu NHibernate doprowadza mnie do białej gorączki wyjątkiem: System.Transactions.TransactionAbortedException: The transaction has aborted. ---> System.Data.SqlTypes.SqlTypeException: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM. Powodem powstania tego wyjątku jest niewypełnienie (lub błąd w definicji mapowania) właściwości DateTime obiektu biznesowego zapisywanego do bazy danych. Problem w tym, że treść tego komunikatu jest tak ogó...
Sztuka programowania 3428 dni, 15 godzin, 11 minut temu 155 źrodło rozwiń
Załóżmy, że mamy timer, który co jakiś próbuje połączyć się np. z usługą:internalstaticclass Sample { publicstaticvoid Main() { using (Timer timer =new Timer(Run, null,0,1000)) { Thread.Sleep(500000); } } privatestaticvoid Run(Object state) { Console.WriteLine("Operacja, ktora moze potrwac czasami nawet kilka minut."); } } Powyższy kod w wielu sytuacjach jest poprawny. Należy jednak mieć na uwadze, że operacje takie jak połączenie z bazą danych ...
Sztuka programowania 3432 dni, 8 godzin, 12 minut temu 145 źrodło rozwiń
Chciałbym rozpocząć nowy cykl na blogu, tym razem o PLINQ. Dzisiaj zaczniemy od podstaw czyli czym jest LINQ oraz kiedy z niego korzystać. PLINQ to skrót od Parallel Linq czyli są to zapytania wykonywane równolegle. W dzisiejszym świecie, programiści starają się zrównoleglić co tylko jest możliwe. Samodzielne pisanie LINQ w sposób równoległy jest dość niewygodne i dlatego Microsoft wprowadził PLINQ. Należy oczywiście zawsze pamiętać, że próba zrównoleglenia operacji, które muszą po prostu zostać wykona...
Sztuka programowania 3433 dni, 1 godzinę, 53 minuty temu 222 źrodło rozwiń
Wielokrotnie pisałem o różnych metodach definiowania sekcji krytycznej w kodzie. Do dyspozycji mamy spinning, który nie usypia wątku. Tak naprawdę dla systemu Windows, taki wątek wciąż istnieje i wykonuje pracę – innymi słowy marnuje czas CPU. Jeśli chcemy zatrzymać wątek na krótko wtedy jest to bardzo wydajne ponieważ nie musimy zmieniać kontekstu (BARDZO kosztowne), korzystać z funkcji Windows (spinning to czysta metoda .NET) czy planować (scheduling) następnych wątków. Jeśli mechanizmy takie jak spin...
Sztuka programowania 3435 dni, 1 godzinę, 4 minuty temu 80 źrodło rozwiń
Operacje na plikach mogą być bardzo czasochłonne. Z tego względu, dobrym zwyczajem jest umieszczenie kodu w osobnym wątku. Często popełnianym błędem jest samodzielne tworzenie wątku:internalstaticclass Sample { publicstaticvoid Main() { var reader =new FileStream(@"c:\setup\1.txt", FileMode.Open); Task.Factory.StartNew(()=>ReadAsync(reader)); } privatestaticvoid ReadAsync(Stream reader) { byte[]buffer=newbyte[100]; reader.Read(buffer, 0, 100); reader.Clos...
Sztuka programowania 3437 dni, 22 godziny, 51 minut temu 162 źrodło rozwiń
To jedyne przykazanie w całym Devkalogu pozostawione w oryginalnej formie. Nie kradnij srajtaśmy z biura? Owszem, nie kradnij, ale ja nie o tym. Nie kradnij poprzez piracenie oprogramowania/muzyki/filmów? Owszem. Ale ja nie o tym. Dawno temu, jeszcze w 2008 roku, Jeremy Millernapisał: If you’re writing ADO.Net code by hand, you’re stealing from your employe...
Sztuka programowania 3438 dni, 8 godzin, 35 minut temu 270 źrodło rozwiń
Ponieważ z knockout.js mam do czynienia od dłuższego czasu (dokładnie od wersji 1.0 ;) ), postanowiłem podzielić się moimi spostrzeżeniami ze tymi, którzy chcą wykorzystać ten framework w swojej pracy, jak również osobami które już go stosują oraz generalnie wszystkim zainteresowanym w pisaniu ustrukturyzowanych skryptów JS.
Sztuka programowania 3440 dni, 7 godzin, 2 minuty temu 313 źrodło rozwiń
Kolejna część cyklu – zapraszam do lektury: http://msdn.microsoft.com/pl-pl/library/optymalizacja-kodu-c-sharp–czesc-3
Sztuka programowania 3440 dni, 23 godziny, 59 minut temu 212 źrodło rozwiń
W celu optymalizacji każdy procesor posiada swój cache. Temat jest dosyć rozbudowany bo zwykłe cache jest podzielony na kilka warstw aby przyśpieszyć dostęp do niego. W dzisiejszym w poście chciałbym wprowadzić pojęcie cache line co jest tak naprawdę po prostu wpisem w pamięci podręcznej. Jeśli procesor czyta jakieś dane to umieszcza je w cache line. Cache line to nie tylko jedna, pojedyncza zmienna a na przykład 64 bajty. Jeśli zatem czytamy pojedynczą zmienną Int32, w rzeczywistości procesor przeczyta...
Sztuka programowania 3444 dni, 9 godzin, 5 minut temu 196 źrodło rozwiń
WebAuthenticationBroker jest ciekawą klasą umożliwiającą autoryzację użytkownika poprzez protokół OAuth 2.0. Czy możemy jednak zrobić coś równie dobrego? Oczywiście, że tak.W tym wpisie zostanie przedstawiony sposób stworzenia swojego brokera do logowania użytkownika w wybranym serwisie.
Sztuka programowania 3444 dni, 9 godzin, 5 minut temu 107 źrodło rozwiń
Jeżeli szukasz dobrego frameworka do MVVM dla WinRT, to koniecznie zobacz nowy ciekawy framework -StyleMVVM.
Sztuka programowania 3447 dni, 8 godzin, 28 minut temu 288 źrodło rozwiń
Czasami zachodzi potrzeba serializacji obiektów, które powinny mieć maksymalnie jedną kopie w tym samym AppDomain. Klasycznym przykładem jest System.DBNull, którego deklaracja wygląda następująco:[SerializableAttribute] [ComVisibleAttribute(true)] publicsealedclass DBNull : ISerializable, IConvertible Załóżmy, że mamy klasę, w której jedna z właściwości ma wartość System.DBNull. Oczywiście podczas serializacji i potem deserializacji nie chcemy tworzyć nowej instancji DBNull – jest to sprzeczne z ...
Sztuka programowania 3447 dni, 8 godzin, 28 minut temu 104 źrodło rozwiń
Załóżmy, że mamy następujący kod:[Serializable] class Person { publicstring Name { get; set; } } Atrybut Serializable mówi, że będzie wspierana serializacja za pomocą IFormatter (np. BinaryFormatter). Jeśli chcemy wspierać ten mechanizm, zawsze powinniśmy tworzyć jawnie backing-field. Kompilator w końcu może wygenerować tak naprawdę dowolną nazwę. Zajrzyjmy do Reflector, aby zobaczyć jak wygląda wewnętrzna struktura: Wygenerowane pole to:[CompilerGenerated] privatestring
Sztuka programowania 3449 dni, 21 godzin, 32 minuty temu 145 źrodło rozwiń
Po odłożeniu kodu na weekend, jego przeglądzie i uwzględnieniu komentarzy, można uznać proces refaktoryzacji za zakończony. Pisząc „proces” mam tu na myśli wykonanie refaktoryzacji o ściśle określonym celu – w tym przypadku było to stworzenie mechanizmu importu, który zastąpi używany obecnie. Nie wchodziły zatem w ten proces...
Sztuka programowania 3449 dni, 21 godzin, 32 minuty temu 82 źrodło rozwiń