Kilka tygodni temu, w jednym z wpisów, porównałem wydajność List z LinkedList. Przykład udowodnił, że dodawanie nowych elementów w LinkedList potrafi być nawet wolniejsze niż w przypadku List. Bardzo często, programiści myślą, że to LinkedList jest lepszy do dodawania nowych elementów, ponieważ łatwiej doczepić nowy wskaźnik niż alokować ponownie pamięć (też tak kiedyś uważałem). W przypadku List jest to jednak nie do końca prawda, ponieważ List
Strona głównaUżytkownik
trismegista | użytkownik
Sztuka programowania 3954 dni, 3 godziny, 55 minut temu 172 źrodło rozwiń
Od czasu do czasu występuje potrzeba sprawdzenia, na czym uruchomiona jest nasza aplikacja – czy na urządzeniu, czy na emulatorze. W tym celu można zastosować następujący kod:if(Microsoft.Devices.Environment.DeviceType== DeviceType.Emulator){ MessageBox.Show("Application has been started in emulator.");} Dzięki takiemu sprawdzeniu możemy przygotować ustawienia dla aplikacji w trak...
Mobile development 3954 dni, 3 godziny, 55 minut temu 83 źrodło rozwiń
IIFE albo po prostu iffy jest to funkcja samowykonująca się w JavaScript. Na pewno nie raz na nią natrafiliście albo nawet sami ją pisaliście:(function() { 'use strict'; }()); Prosta sprawa. Nic dodać nic ująć. Jest ona o tyle fajna, że w niej można zawrzeć dyrektywę 'use strict'; która znacząco poprawi jakość naszego kodu w JS – przynajmniej poprawi na tyle na ile będzie mogła ;) Nie zależnie od tego, natrafiłem dzisiaj na coś co mi się bardzo nie spodobało. Szablon funkcji IIFE stworzony prze...
Wiele aplikacji wymaga generowanie dokumentów PDF – i dobrze, bo są fajne. Gdy jednak programista rzucony zostaje w całe wzburzone morze możliwych do zastosowania rozwiązań, bo nie jest już tak wesoło. Kiedyś było prosto: brało się iTextSharp i wsio. Jednak od paru lat (?) licencja tego komponentu się zmieniła, i ja w sumie sam nie wiem kiedy można a kiedy nie można go używać oraz ile to kosztuje. Z niego korzystają inne dostępne rozwiązania,...
Wyszukiwanie pełnotekstowe, to mechanizm wydajnego przeszukiwania kolumn o charakterze tekstowym. W tym celu zakładany jest specjalny indeks na tabeli, która ma zostać przeszukana. Zapytania wykonywane na takim indeksie pozwalają dokonać językowego przeszukiwania opartego na regułach określonego języka. Zwrócone rezultaty, to obiekty zawierające przynajmniej jedno dopasowanie (tzw. hit). P...
Bazy danych i XML 3955 dni, 5 godzin, 13 minut temu 212 źrodło rozwiń
W trakcie mojej niedawnej prezentacji poświęconej technologii in-memory OLTP w systemie SQL Server 2014 padło pytanie (w pełni zasadne), czy w związku z wprowadzeniem na potrzeby definiowania tabel in-memory możliwości definiowania indeksów inline w składni polecenia CREATE TABLE podobne definiowanie indeksów będzie możliwe dla tradycyjnych tabel. Okazuje się, że tak. W dokumentacji SQL Server 2014 w części poświęconej nowościom w silniku bazodanowym została wymieniona specyfikacja indeks...
Bazy danych i XML 3960 dni, 17 godzin, 22 minuty temu 139 źrodło rozwiń
Jednym zdaniem NCrunch to narzędzie do automatycznego uruchamiania testów jednostkowych w Visual Studio. Pisałem już o NCrunch-u ale o tak świetnym dodatku warto napisać jeszcze raz i to z dwóch powodów. Po ostatniej prezentacji na ITAD na bielskiej ATH kilka osób pytało mnie o zielony pasek więc w ramach wyjaśnienia taki zielony pasek to wła...
Kiedyś pisałem o modyfikatorze sealed i dlaczego warto go używać jeśli chodzi o kwestie dobrych praktyk. Podobne mam zdanie co do modyfikatora virtual – używam wyłącznie jak mam takie wymagania. Zawsze zaczynam od najbardziej restrykcyjnych modyfikatorów. Klasy deklaruję jako sealed internal, a metody jako private. Nie zaznaczam metod jako virtual “na zapas”, ponieważ skoro nie są one zaprojektowane pod tym kątem to może przynieść to więcej kłopotów niż korzyści. Analogiczne zasady stosuje się np. w bezp...
Sztuka programowania 3960 dni, 17 godzin, 22 minuty temu 262 źrodło rozwiń
Czasami można zaobserwować następujący kod:int[] firstArray = Enumerable.Range(1, 1000).ToArray(); int[] secondArray = Enumerable.Range(1, 1000).ToArray(); foreach (int item in firstArray) { Process(item); } foreach (int item in secondArray) { Process(item); } Mam na myśli sytuacje kiedy mamy kilka osobnych tablic, ale przetwarzanie ich jest takie same lub bardzo podobne. Inny przykład to przetworzenie tablicy, a potem pojedynczego elementu pochodzącego z innego źródła...
Sztuka programowania 3960 dni, 17 godzin, 22 minuty temu 211 źrodło rozwiń
Na początek roku post minimalistyczny - kilka linków, które gnieżdziły się w mojej głowie ostatnio. Co dalej z Windows, Windows Phone, C#, Visual Studio? Odpowiedź już za niecałe 3 miesiące na BUILD 2014! Pierwsze przecieki o Windows 8.1 Update 1, który ma się ukazać w marcu tuż przed BUILD (choć ciekawszy wydaje się bardziej mglisty “Threshold”). Interesujące rozważania na temat języków programowania prosto z Microsoft. Sienna - genialny przykład minimalistycznej roboczej aplikacji Windows Store, takie...
O IntelliTrace pisałem już wielokrotnie. Do tej pory nie wyjaśniłem jednak, że chociaż IntelliTrace nazywamy debugger'em historycznym to w rzeczywistości IntelliTrace jest profilerem. Dokładniej mówiąc jednym z komponentów składowych IntellITrace jest niezarządzana implementacja interfejsu ICorProfiler. Profiler ten komunikuje się z zarządzaną częścią IntelliTrace, czyli z programem IntellITrace.exe. IntellITrace.exe jest natomiast używane przez Visual Studio...
Zwyczajny, często widziany kod który parsuje stringa na inta. int Foo(string value) { var pageId = string.IsNullOrEmpty(value) ? 0 : int.Parse(value); return pageId; } W zależności od tego czy jesteśmy pewni, że przekazany string ładnie się sparsuje, powyższa funkcja może wystarczyć lub nie. Fakt, że dostajemy string już mówi, że coś może pójść nie tak. Gdybyśmy mogli przekazać int...
Sztuka programowania 4000 dni, 3 godziny, 24 minuty temu 251 źrodło rozwiń
The dynamic keyword has been part of the C# language for quite a while now. I thought I know it well, yet I stumbled upon an interesting case that surprised me.The code that works Here's a piece of code that I started with. This code works like you would expect.
Sztuka programowania 4000 dni, 3 godziny, 24 minuty temu 115 źrodło rozwiń
Zrównoleglenie danego algorytmu to jeszcze nie koniec wyzwań. Pytanie jakie należy postawić, to jak wiele stworzyć wątków? Musimy wziąć pod uwagę synchronizacje i problemy z tym związane. Jeśli mamy tylko 4 procesory, wtedy tworzenie więcej niż 4 wątków nie przyśpieszy obliczeń, jeśli wszystkie one zawsze będą zajęte. Tworzenie większej liczy wątków niż CPU, ma sens wyłącznie jak część z nich musi czekać na jakieś dane i tym samym, nie wykorzystują one w pełni cykli CPU. Liczba wątków, zależy od tego j...
Sztuka programowania 4000 dni, 3 godziny, 24 minuty temu 98 źrodło rozwiń
Sporadycznie, podczas instalacji VS 2013 może nastąpić mały problem, o którym dowiemy się dopiero w trakcie tworzenia nowego projektu – nie każdego rodzaju, ale takiego, który polega na paczkach NuGet. Mianowicie, jak będziemy chcieli stworzyć nowe solution z projektem, otrzymamy taki o to błąd:The system cannot find the file specified. (Exception from HRESULT: 0x80070002) Jak zaś będziemy chcieli dodać projekt do istniejącego solution – lub pustego, założonego przy pierwszym błędzie, otrzymamy taki o ...
Nie wiem jak wy ale ja kocham debugować kod. Odkrywanie, gdzie programista (w wielu wypadkach ja sam!) popełnił (świadomie/nieświadomie) błąd wprawia mnie w stan euforii pewnie jak morfina uzależnionego :). Visual Studio (dla mnie) jest dość bliskie idealnego narzędzia do tego celu, ale do szczęścia brakowało mu kilku rzeczy. Jedną z nich był podgląd zwracanej wartości z funkcji. W poprzedniej wersji mogliśmy tę wartość uzyskać, ale trzeba było się troszkę "namęczyć". VS 2013 to the rescue Najnow...
Gdybyś mnie dziś zapytał jakie książki warto przeczytać aby lepiej programować to odpowiedziałbym:Pragmatyczny programista. Od czeladnika do mistrza.Czysty kod. Podręcznik dobrego programisty (Uncle Bob)Agile. Programowanie zwinne: zasady, wzorce i praktyki zwinnego wytwarzania oprogramowania w C# (również Uncle Bob) Ot taki starter. Wszystkie książki czytałem już kilka lat temu więc nie pamiętam dokładnie co w...
Takie stwierdzenie nasunęło mi się przedwczoraj podczas przeglądania dotNETomaiank.pl. Chodzi mi dokładnie o to, że nikt nie podbija. Zaglądnąłem na główną, a tam z góry na dół same jedynki i jedna dwójka (na 20 wpisów). Po co się starać fajny post napisać, jak tak naprawdę i tak wszystko jest płaskie i każdy kliknie. Od tego jest .NET Blogs PL, gdzie po prostu serwuje się aktualne posty z blogów, które chcą się tam ...
Jak macie R# 8 zainstalowanego to odpalajcie jego extension manager (alt+r+x) i instalujcie Resharper Mnemonics Live Templates (możliwe że restart vs będzie wymagany albo po prostu się powiesi przy pierwszym wykorzystaniu). Rozszerzenie to dodaje szablony do tworzenia klas (c), metod (m), własności (p), opcji macie wiele, najważniejsza zasada to taka, że jeżeli pierwsza litera jest mała to jest to metoda/klasa/własność publiczna, jak jest duża to jest to statyczna publiczna. Wasza praca stała się właśn...
W tej części omówię jak wykonać kilka prostych technik, tj. jak:zgrupować testy za pomocą atrybutu [TestCase],testować wyjątki,testować zdarzenia. Na tapetę idzie przykład dzielenia; chcemy napisać funkcjonalność i testy mając na uwadze, że:metoda Divide należy do klasy Calculator,metoda Divide przyjmuje dwa parametry wejściowe — obydwa typu int; zwracanym ...
Sztuka programowania 4136 dni, 1 godzinę, 4 minuty temu 164 źrodło rozwiń