autor: Trafiłem dzisiaj na ciekawy artykuł, którego autor testuje szybkość wykonania różnych metod mających na celu zwrócenie ilości linii zawartych w zmiennej typu string.
Klasy są chyba najbardziej skomplikowanym działem języka C#, a z pewnością najbardziej rozbudowanym. Każda osoba starająca nauczyć się języka będzie musiała się z nimi zapoznać. Klasy w C#, tak jak w większości języków obiektowych, są schematami na podstawie których budowane są obiekty… …I to by było na tyle jeśli chodzi o teorię, czas na trochę kodu!
Często zależy nam by pewien obiekt przechowywał w sobie wartości tylko z określonego zbioru. W takiej sytuacji z pomocą przyjdzie nam typ wyliczeniowy.
Tworząc biznesową aplikacje webową dochodzimy do miejsca, gdy trzeba ją odpowiednio zabezpieczyć. Do tego służą oczywiście certyfikaty. Aby nasz serwis działał również po SSL należy poczynić parę kroków....
W ostatnim poście obiecałem pokazać na przykładzie, że destruktory rzeczywiście mają negatywny wpływ na wydajność. Mamy prostą klasę:class MyClass { ~ MyClass() { // Jakis bezensowny kod np:for (int i =0; i <100*10000; i++) { var newinstance =new myclass(); } stopwatch.stop(); long duration = stopwatch.elapsedmilliseconds; przyjrzyjmy się teraz diagramowi przedstawiającemu rozkład obiektów względem generacji (clr profiler): na moim komputerze duration wyniósł 900. usuńmy destruk...
W każdej aplikacji, wykorzystujacej bazę danych do przechowywania informacji, są elementy/tabele/struktury, których zawartość zmienia się niezmiernie rzadko. W związku z tym, zasadne wydaje się zaimplementowanie mechanizmu przechowywania tychże informacji w “bardziej stałym” obiekcie. Ograniczyło by to komunikację pomiędzy bazą danych i aplikacją, a tym samym zwiększyło wydajność aplikacji. Mechanizm taki można zaimplementować na wiele sposobów. Jednym z nich może być klasa typu Manager do przechowywania...
Jeśli miał ktoś do czynienia np. z CPP z pewnością kojarzy pojęcie destruktora. Jest to metoda, wywoływana w momencie zwalniania obiektu z pamięci (przeciwieństwo konstruktora). Zarówno w CPP jak w C#, nazwa destruktora stanowi ‘~’ plus nazwa klasy.
autor: Czy korzystacie z refleksji w .NET? Czy zdarzyło wam się przeglądać/ustawiać właściwości klas poprzez refleksje? Czy korzystacie z atrybutów? Mnie często i równie często zdarzało mi się ponownie szukać kodu, który rozwiązałby mój problem, dlatego dla wygody poniżej zamieszczam różne funkcje rozszerzające, które realizują wspomniane wyżej zadania. (być może komuś jeszcze się one przydadzą).
Funkcja walidujaca REGON w VisualBasic .NET : Napisałem dziś funkcje w Visual Basic .NET (bo nigdzie w necie jeszcze nie ma) walidującą nr REGON. Poniżej przedstawiam jej kod Public Function walidujRegon(ByVal numerREGON As String) Dim cyfraKontrolna As Integer Dim dlugoscRegon As Integer = Len(numerREGON) 'wagi regonów 'regon7 = 2,3,4,5,6,7 'regon9 = 8,9,2,3,4,5,6,7 'regon14 = 2,4,8,5,0,9,7,3,6,1,2,4,8 If (dlugoscRegon 14) Then If (dlugoscRegon 9) Then If (dlug...
W poprzednim poście przedstawiłem zasadę działania generacji w GC. Dowiedzieliśmy się, że zwalnianie zasobów z generacji 0 jest bardzo szybkie z kolei z GEN 2 wolne. Healthy GC to reguła określająca optymalny (zdrowy) stan GC: gen0 : gen1 : gen2 => 100 : 10 : 1 W Internecie można również znaleźć nieco inne wartości ale ogólna zasada jest taka sama: GEN0 powinna zawierać dużo więcej obiektów niż GEN2. Jeśli obiekty nie są zwalniane, wtedy promowane są do generacji pierwszej i drugiej. Z poprzedniego po...
Aby pisać kod, który jest wydajny i optymalny należy dobrze zrozumieć jak działa Garbage Collector (GC). W dzisiejszym poście przedstawię ogólne zasady działania GC na przykładzie algorytmu mark and sweep. Zaznaczam, że implementacja w .NET różni się i jest dużo bardziej wyrafinowana – ale o tym w następnych postach. Chcę najpierw przedstawić algorytm mark and sweep ponieważ da to czytelnikowi ogólny obraz zagadnienia związanego ze zwalnianiem pamięci w językach zarządzanych. Garbage Collector oczywiści...
Co byście powiedzieli na taki kod?publicclass Person { publicstring FirstName; publicstring LastName; publicstring GetFullName() { returnstring.Format("{0} {1}", FirstName, LastName); } } Na pierwszy rzut oka może nic poważnego. Jednak jeśli chcemy pisać kod zgodny z praktykami C#, powinniśmy zwrócić uwagę na następujące kwestie:Enkapsulacja, FirstName,LastName powinni być ukryte i ewentualnie wyeksponowane za pomocą setterow\getterów.GetFullName jest dobrym sposobem dla Javy (a w...
Rozważmy następujący kod:IEnumerable
W postach oznaczonych “Code review” zamierzam przedstawiam dobre i złe praktyki pisania kodu. Posty przeważnie będą składały się z fragmentu kodu i opisu co jest w nim źle. Dziś spójrzmy na:StreamReader streamReader =new StreamReader(File.Open(path, FileMode.Open)); string header = streamReader.ReadLine(); string dataPoints = streamReader.ReadLine(); string[] dataPointArray = dataPoints.Split(newchar[]{';’});streamReader.Close(); Co w tym jest jest nie tak? W przypadku gdy np. ReadLine wyrzuci wyjątek, ...
Co raz więcej programistów interesują się językiem Ruby. Jest to wysokopoziomowy język dynamiczny. Dużą rolę odegrał framework Ruby on Rails, dzięki czemu język nabył swoją popularność. Ten artykuł pomoże początkującym (i nie tylko) programistom zapoznać się z tym językiem, który przy napisaniu stosownie małego kawałku kodu pozwala na zrealizowanie prostej funkcjonalności. W tym artykule dowiesz się o :instalacji środowiska, implementacji prostej aplikacji.
Czy na pewno code review to strata czasu? Cóż może być nudniejsze i bardziej kosztowne niż przeglądanie cudzego kodu źródłowego? Chyba już tylko poprawnianie w nim błędów. Jeszcze kilka lat temu koncepcja przeglądania mojego kodu przez kolegów z zespołu była dla mnie totalną abstrakcją. Aczkolwiek, z czasem zrozumiałem, że w tym szaleństwie jest metoda. W kilku punktach chciałbym przedstawić benefity, które może wprowadzić Code Review do Twojego ekosystemu projektowego drogi Czytelniku. Edukacja M...
Klasa Barrier umożliwia synchronizacje kilku wątków. Mechanizm bardzo znany np. z Ady pozwala dopuścić wykonanie kodu wyłącznie jeśli inne wątki na to się zgadzają. Załóżmy, że mamy 4 wątki robiące równoległe jakieś obliczenia. Po ich zakończeniu chcemy scalić wynik ale musimy poczekać aż wszystkie zadania zostaną ukończone. W C# 4.0 można wykorzystać tzw. taski, ale w tym artykule skupimy się na Barrier, która służy to dużo bardziej skomplikowanych zadań. Przypuśćmy, że nasz algorytm składa się z kilku...
Macie czasem tak, że podczas długiej sesji z debuggerem, wiedząc, że jakiś breakpoint nie wskoczy prędko przełączacie się z VS aby później zorientować się, że breakpoint już dawno czekan na waszą reakcję a wy po prostu nie zauważyliście tego małego migoczącego znaku VS w pasku? O właśnie o ten mrygacz chodzi :) Jeśli tak to ten post jest dla was - jeśli nie poczytajcie jak wkurzyć kolegów :) Okazuje się, że VS prócz standardowych opcji, które możemy ustawić w Tools->Options posiada kilka dodatkowyc...
Na wstępie skrótowo wytłumaczę, co rozumiem pod pojęciami zawartymi w tytule. Programowanie imperatywne polega na tym, że kod programu składa się z instrukcji (czyli rozkazów). Najbardziej typowe instrukcje to przypisania, wywołania procedur / metod, instrukcje warunkowe czy pętle. W programowaniu imperatywnym zmieniający się stan programu jest czymś naturalnym, a niedeterministyczne działanie procedur i metod - czymś często występującym. Zupełnie innym podejściem jest programowanie deklaratywne. W ...
Wiele osób z pewnością kojarzy pliki PDB, przynajmniej z nazwy. Myślę, jednak, że w praktyce mało kto zdaje sobie sprawę co one zawierają i kiedy mogą się przydać programiście. W poście zatem chciałbym przybliżyć praktyczne korzyści z używania Program Database Files. Z pewnością PDB kojarzy się z debuggowaniem i niestety z czymś niepotrzebnym w środowisku produkcyjnym – co jak się okaże jest nieprawdą! Zacznijmy od wprowadzenia teoretycznego, PDB dla .NET zawiera:Nazwy plików z kodem źródłowym.Nazwy lo...