Strona głównaUżytkownik

pzielinski | użytkownik

pzielinski
pzielinski
27 178,29
4089 dni, 4 godziny, 46 minut temu
21 lutego, 2010
dotnetomaniak.pl

W C# istnieje kilka metod sprawdzania czy obiekty są takie same. Czasami budzi to zamieszanie i dlatego w dzisiejszym wpisie chciałbym rozjaśnić wszelkie różnice i wyjaśnić jak prawidłowo powinno to być zaimplementowane. Mamy dwa sposoby porównywania obiektów. Pierwszy to sprawdzenie czy wskazują na taki sam obszar pamięci. Druga metoda polega na porównaniu wszystkich pól i sprawdzeniu czy są takie same. Jeśli pola mają taką samą wartość to przyjmujemy, że obiekty są sobie równe (value identity). W .NE...

Tagi: C#
Dziel się z innymi:
Piotr Zieliński » Porównywanie obiektów

Inne 4440 dni, 14 godzin, 52 minuty temu pzielinski 207 źrodło rozwiń

W ostatnim poście przedstawiłem sposób na implementację unii w C#. Dziś kilka przykładów. Proszę jednak zwrócić uwagę, że unie zostały wprowadzone w czystym C, który nie miał nic wspólnego z programowaniem obiektowym. Dzisiaj możemy wiele konstrukcji lepiej napisać, wykorzystując klasy. Unie również ważną rolę odgrywały w optymalizacji.  W c# sprawa wygląda inaczej, ponieważ jeśli zgodziliśmy się na zarządzaną pamięć przez GC, raczej nie zależy nam na oszczędzaniu kilku bajtów. Niemniej jednak klasyczny...

Tagi: C#, unie
Dziel się z innymi:
Piotr Zieliński » Unie w C#–zastosowanie

Inne 4443 dni, 20 godzin, 45 minut temu pzielinski 184 źrodło rozwiń

Dziś trochę o .NET Framework i strukturze BigInteger. Myślę, że komuś może to oszczędzić czasu na pisaniu własnych implementacji. Każdy z nas korzystał z typów takich jak short, int czy long. W większości przypadków w zupełności one wystarczającą i pokrywają większość scenariuszy. Czasami jednak aplikacja musi operować na dużo większych liczbach niż 32 czy 64 bitowe zmienne. BigInteger potrafi przechować dowolnie wielką liczbę całkowitą (ujemną lub dodatnią). BigInteger znajduje się w bibliotece System...

Tagi: BigInteger, C#
Dziel się z innymi:
Piotr Zieliński » Klasa BigInteger

Inne 4447 dni, 3 godziny, 27 minut temu pzielinski 128 źrodło rozwiń

W poprzednim poście omówiłem atrybut StructLayout. Dzisiaj z kolei więcej przykładów. Głównie StructLayout wprowadzono aby móc wykonywać kod niezarządzany w .NET. Czasami wciąż zachodzi potrzeba wykorzystania niektórych funkcji z WinAPI. Cześć funkcji przyjmuje jako parametr struktury danych, które oczywiście musimy zmapować na strukturę c#. Na przykład, załóżmy, że mamy następującą strukturę:typedef struct DISPLAYDEVICE { DWORD cb; TCHAR DeviceName[32]; TCHAR DeviceString[128]; DWORD StateFlag...

Tagi: C#
Dziel się z innymi:
Piotr Zieliński » StructLayout–zastosowanie

Inne 4450 dni, 6 godzin, 7 minut temu pzielinski 69 źrodło rozwiń

Zanim przejdę do wyjaśniania po co został wprowadzony atrybut StructLayout, najpierw wyjaśnię jak pola w strukturach danych są rozmieszczane w pamięci. Weźmy na przykład taką strukturę:struct SampleStruct { publicbyte OneByte; publicint FourBytes; publicbyte OneByte1; } Ile pamięci powinno zostać zaalokowanej dla powyższej struktury? Może wydawać się, że 6 ponieważ Integer zajmuje 4 a Byte 1. Ze względu na optymalizacje nie jest to takie proste i oczywiste. Na moim komputerze jest to 12. Proc...

Tagi: C#, StructLayout
Dziel się z innymi:
Piotr Zieliński  » StructLayout – wprowadzenie

Inne 4452 dni, 20 godzin, 57 minut temu pzielinski 99 źrodło rozwiń

Jak wiemy, każdy obiekt, zarówno reference jak i value, pochodzi pośrednio\bezpośrednio od klasy object. Nie chce omawiać szczegółów ale jedną z protected metod dostarczonych przez object jest właśnie MemberwiseClone. Do czego ona służy? W skrócie: do wykonania tzw. płytkiej kopii (shallow copy). MemberwiseClone kopiuje obiekt pole po polu. Niestety jest to płytka kopia więc jak jakiś obiekt zawiera referencje do innych obiektów wtedy jedynie adres zostanie sklonowany a nie całe drzewo obiektów. Z typam...

Dziel się z innymi:
Piotr Zieliński  » Metoda MemberwiseClone

Inne 4455 dni, 17 godzin, 4 minuty temu pzielinski 104 źrodło rozwiń

W poprzednim poście podałem krótki fragment kodu, który można było zoptymalizować. Wspomniałem o parametrze StringComparison, który zwykle sprawia problemy w zrozumieniu. W dzisiejszym wpisie postaram się wyjaśnić różnicę między poszczególnymi porównaniami. Dla przypomnienia istnieją następujące wartości StringComparison: 1. Ordinal  – domyślna wartość. Znaki zamieniane są na wartości numeryczne  i wtedy porównywane. Zdecydowanie najszybsza metoda jeśli chodzi o wydajność. 2. OrdinalIgnoreCase – tak ja...

Tagi: C#
Dziel się z innymi:
Piotr Zieliński » Porównywanie string’ów część II – ustawienia regionalne, StringComparison

Inne 4458 dni, 20 godzin, 24 minuty temu pzielinski 103 źrodło rozwiń

Kod:if(anyText.ToLower()=="tekst") { Console.WriteLine("Zmienne takie same"); } Kod ma na celu sprawdzenie czy jakaś zmienna jest równa danemu strumieniowi znaków. Nie chcemy brać pod uwagę wielkości liter więc dlatego używamy funkcji ToLower. Zatem if zwróci true gdy anyText jest równy “tekst” lub “TEKST” itp. Rozwiązanie ma jedną wadę – tworzony jest nowy, tymczasowy string po wywołaniu metody ToLower. W powyższym przykładzie będziemy mieli zatem 3 obiekty: anyText, obiekt dla “tekst” oraz obie...

Tagi: C#, Code review
Dziel się z innymi:
Piotr Zieliński » Code review: porównywanie string’ów

Inne 4461 dni, 20 godzin, 23 minuty temu pzielinski 202 źrodło rozwiń

Kolejna cześć artykułu z cyklu “Dobre i złe praktyki”: http://msdn.microsoft.com/pl-pl/library/dobre-i-zle-praktyki-w-c-sharp–czesc-4.aspx

Dziel się z innymi:
Piotr Zieliński  » Dobre i złe praktyki w C# – część IV (programowanie współbieżne)

Sztuka programowania 4464 dni, 19 godzin, 8 minut temu pzielinski 112 źrodło rozwiń

Klasa Parallel stanowi doskonałe dopełnienie do task’ów.  Dostarcza trzy statyczne metody:Invoke – współbieżne uruchomienie kilku zadań. For – współbieżna pętla FOR. ForEach – współbieżna pętla foreach. Klasa stanowi helper, ponieważ wszystkie powyższe operacje można wykonać za pomocą obiektów Task lub Thread. Implementacja jednak własnej pętli współbieżnej jest zawsze trudniejsza niż użycie po prostu gotowej metody. Zacznijmy od Invoke, przykład:staticvoid Main(string[] args) { Parallel.Invoke(Me...

Tagi: C#, Parallel
Dziel się z innymi:
Piotr Zieliński » Klasa Parallel

Inne 4465 dni, 21 godzin, 41 minut temu pzielinski 100 źrodło rozwiń

Kolejna część artykułu z cyklu dobre i złe praktyki. Zapraszam do lektury: http://msdn.microsoft.com/pl-pl/library/dobre-i-zle-praktyki-w-c-sharp–czesc-3.aspx

Tagi: C#
Dziel się z innymi:
Piotr Zieliński » Dobre i złe praktyki w C# – część III (programowanie współbieżne)

Sztuka programowania 4465 dni, 21 godzin, 41 minut temu pzielinski 175 źrodło rozwiń

W ostatnim poście napisałem kiedy warto korzystać z strong-name. Jeśli ktoś uważnie prześledził screen’y dołączone do postu, być może dostrzegł, że jest tam opcja taka jak “Delayed Signing”. Do czego to służy? Sprawa jest bardzo prosta. Delayed signing po prostu nie używa klucza prywatnego. Taka biblioteka nie zawiera więc poprawnego podpisu cyfrowego a w miejsce jego zawiera same zera. Klucz publiczny z kolei jest wstawiany do biblioteki z tym, że nie jest liczony jej hash. Integralność zatem jest nie...

Dziel się z innymi:
Piotr Zieliński » Czym jest “Delayed signing”?

Inne 4473 dni, 11 godzin, 28 minut temu pzielinski 125 źrodło rozwiń

Nie wiem czy jest polski odpowiednik strong-named(SN) wiec będę używał nazwy angielskiej albo skrótu SN. Do zrozumienia tego wpisu niezbędna jest podstawowa wiedza o asymetrycznych algorytmach szyfrowania (RSA), podpisie cyfrowym , kluczu prywatnym, publicznym oraz zasadzie działania funkcji haszującej. Nie będę tego omawiał w poście, zachęcam więc do zapoznania się na własną rękę jeśli któreś z tych pojęć jest niezrozumiałe. SN to przede wszystkim sposób na unikalne identyfikowanie bibliotek. Przed poj...

Dziel się z innymi:
Piotr Zieliński » Biblioteki Strong-Named

Narzędzia 4476 dni, 14 godzin, 16 minut temu pzielinski 142 źrodło rozwiń

Dziś podstawy języka c#. Wszyscy znają modyfikatory public, protected, private i chętnie z nich korzystają. Modyfikator protected internal jest zdecydowanie mniej popularny a scenariusze użycia jeszcze rzadziej są prawidłowo identyfikowane. Jak sama nazwa mówi protected internal składa się z dwóch poziomów dostępności. W obrębie tego samego assembly zachowuje się jak czysty internal i mamy dostęp do pola tak jakby było one public. Załóżmy, że projekt składa się z dwóch bibliotek. W bibliotece numer A d...

Dziel się z innymi:
Piotr Zieliński  » Modyfikator protected internal

Sztuka programowania 4480 dni, 7 godzin, 3 minuty temu pzielinski 219 źrodło rozwiń

W ostatnim poście pisałem o barierze jako rozwiązaniu na uniknięcie problemów z związanych z optymalizacją dokonywaną przez CPU (re-ordering). Kilka postów wcześniej pisałem z kolei o buforowaniu danych i słowie kluczowym volatile. Jeśli nie wiedzie co to jest MemoryBarrier oraz Volatile zachęcam do przeczytania tych wpisów najpierw – bez nich dzisiejszy post będzie kompletnie niezrozumiały. Wiemy, że caching oraz re-ordering może na niektórych architekturach spowodować trudne w analizie błędy. Dziś chc...

Tagi: bariera, C#, lock
Dziel się z innymi:
Piotr Zieliński  » Blokada lock a bariera oraz caching

Sztuka programowania 4482 dni, 14 godzin, 49 minut temu pzielinski 81 źrodło rozwiń

W .NET istnieje metoda Thread.MemoryBarrier(). W użyciu jest bardzo prosta – nie wymaga przekazania żadnych parametrów. Strona teoretyczna jest jednak bardziej skomplikowana. Przed wyjaśnieniem czym jest Memory Barrier w świecie współbieżnym musimy zrozumieć jak wykonywane są instrukcje przez procesor. Załóżmy, że mamy następujące operacje:a = b +1 c = a +1 d = e +1; W jakiej kolejności zostaną wykonane powyższe operacje? Naturalne wydaje się, że procesor wykona je po kolei. Jednak ze względu na różn...

Tagi: C#, MemoryBarrier
Dziel się z innymi:
Piotr Zieliński » Thread.MemoryBarrier–wprowadzenie

Sztuka programowania 4485 dni, 20 godzin, 39 minut temu pzielinski 134 źrodło rozwiń

Dziś trochę dla odmiany, nie będę pisał o wielowątkowości a o jednym z podstawowych słów kluczowych w c#, które na szczęście nie jest bardzo popularne – bazując na moim doświadczeniu z różnymi projektami, rzadko widuje je w kodzie. Global przydaje się gdy mamy konflikty z przestrzeniami nazw. Wyobraźmy sobie, że mamy następujący kod (kod  bazuje na dokumentacji MSDN):class Program { publicclass System { } constint Console =7; staticvoid Main() { } } Następnie chcemy w metodzie Co...

Tagi: C#, global
Dziel się z innymi:
Piotr Zieliński » Słowo kluczowe global

Sztuka programowania 4489 dni, 4 godziny, 27 minut temu pzielinski 242 źrodło rozwiń

Witam kolejna cześć artykułu z cyklu “dobre i złe praktyki w c#”. Zapraszam do lektury: http://msdn.microsoft.com/pl-pl/library/dobre-i-zle-praktyki-w-c-sharp–czesc-2.aspx

Tagi: C#
Dziel się z innymi:
Piotr Zieliński » Dobre i złe praktyki w C# – część II

Sztuka programowania 4492 dni, 2 godziny, 25 minut temu pzielinski 391 źrodło rozwiń

Kiedyś na blogu opisywałem kilka implementacji singleton’a przystosowanych do pracy w środowisku wielowątkowym. Jedna z nich opierała się na tzw. double checked locking:publicsealedclass Singleton { privatestatic Singleton mInstance =null; privatestaticreadonlyobject mSync =newobject(); private Singleton() { } publicstatic Singleton Instance { get { if(m_Instance ==null ) { lock(m_Sync) { i...

Tagi: C#, Singleton
Dziel się z innymi:
Piotr Zieliński » Code review: Wielowątkowy singleton

Sztuka programowania 4494 dni, 16 godzin, 18 minut temu pzielinski 212 źrodło rozwiń

WPF dostarcza obiekt Freezable. Możemy dziedziczyć po tej klasie aby stworzyć własne obiekty immutable. Ze względów wydajnościowych, można takowy obiekt “zamrozić” i wtedy nie można już go więcej modyfikować – staje się więc immutable.  Przykład:internalclass SampleClass : Freezable { public SampleClass(string text) { Text = text; } protectedoverride Freezable CreateInstanceCore() { returnnew SampleClass(null); } publicstaticreadonly DependencyProperty TextProperty = ...

Tagi: C#, Freezable
Dziel się z innymi:
Piotr Zieliński » Obiekty Freezable

Windows 4497 dni, 13 godzin, 55 minut temu pzielinski 152 źrodło rozwiń

1 2... 5 6 7 8 9 10... 19 20