11/04/2009

Życzenia

Home



Życzę wszystkim wesołych i spokojnych Świąt Wielkiej Nocy spędzonych z najbliższymi.

Serdecznie pozdrawiam
Michał Komorowski

09/04/2009

Visual Studio i za długie ścieżki

Home

Możliwe, że to znany problem ale ja natknąłem się na niego ostatnio. Otóż siedzę sobie i koduję, oczywiście używając Visual Studio i w pewnym momencie zdecydowałem, że potrzebuję z bazy kodów (aktualnie używam Visual Source Safe) pobrać nowy projekt. Sprawa prosta, wybrałem polecenie Add -> Existing Project..., wyszukałem interesujący mnie projekt, wybrałem Ok i... Visual Studio kaput. Bez żadnego ostrzeżenia, komunikatu środowisko zostało zamknięte. No cóż, myślę sobie, spróbuję jeszcze raz. Za drugim, trzecim razem dokładnie to samo. Sprawa dziwna bo inne projekty pobierają się bez problemu. Zaczynam się zastanawiać i nagle przebłysk, że chyba słyszałem o czymś takim, o jakimś problemie z długością ścieżek. Kilka eksperymentów i okazało się, że problem występuje jeżeli pełna ścieżka do pliku z projektem umieszczonym w bazie kodów przekracza 120 znaków. Jak sobie z tym poradzić. Nie pozostaje nic innego jak pobrać projekt na dysk przy pomocy Visual Source Safe Explorer i wczytać go z tej lokalizacji. Dalej Visual Studio już sobie poradzi.

Velocity - co nowego?

Home

Dwa dni tempu pojawiła się wersja CTP 3 Velocity. Ponieważ w kilku postach wspominałem o tej technologii pozwalającej na rozproszone cache'owanie danych chciałbym w kilku słowach napisać o najważniejszych nowościach względem CTP 2.
  • Mechanizm powiadamiania - W tej chwili możliwe jest reagowanie kiedy jakiś region (grupa logicznie powiązanych z sobą obiektów umieszczonych w cache'u) jest dodawany, aktualizowany lub usuwany z cache'a. Mechanizm powiadamiania umożliwia również automatyczne unieważnianie cache lokalnego. Cache lokalny utrzymywany jest po stronie klienta i zawiera kopie danych pobranych z klastra. Do tej pory dane zgromadzone w tym cache'u były unieważniane dopiero po upływie określonego czasu. W tej chwili zostaną unieważnione tak szybko jak cache lokalny otrzyma powiadomienie.
  • Poprawienie wydajności.
  • Poprawienie bezpieczeństwa - Usługa gospodarza hosta działa teraz z uprawnieniami konta (mniejszymi niż dotychczas): Network Service.
  • Nowe opcje zarządzania klastrem - Wraz z CTP 3 rolę zarządcy klastra może pełnić instancja SQL Server'a. Wcześniej za zarządzanie klastrem byli odpowiedzialni tylko tzw. główni gospodarze (ang. lead host). Równocześnie usunięto możliwość przechowywania konfiguracji klastra w pliku XML.
  • Ulepszenia programu instalacyjnego - Wprowadzono możliwość automatycznej instalacji oraz zwiększono zakres dostępnych w czasie instalacji opcji.
  • Nowe API - Ta zmiana nie cieszy mnie za bardzo ale nic nie poradzę. Ogólnie zmieniło się nazewnictwo klas, delegatów, kolejność parametrów w metodach itd. czyli w sumie całkiem sporo.

30/03/2009

.NET Remoting - podsumowanie

Home

W ostatnim czasie kilkukrotnie rozmawiałem, odpowiadałem na pytanie dotyczące przekazywania danych z serwera do klienta i w drugą stronę przy użyciu .NET Remoting. W poście tym chciałbym zebrać wszystkie informacje i przedstawić w spotaci klarownej tabelki. Dalej będę używał skrótu MBVO (ang. Marshal by value object) dla określenia obiektów klas przekazywanych przez wartość oraz MBRO (ang Marshal by reference object) dla określenia obiektów klas przekazywanych przez referencję. Klasy obiektów MBVO oznaczone są atrybutem SerializableAttribute, a klasy obiektów MBRO dziedziczą po MarshalByRefObject i ewentualnie mogą być oznaczone atrybutem SerializableAttribute ale jest to zbyteczne.



Metody obiektów MBVO wykonują się zawsze lokalnie dla wywołującego. Metody obiektów MBRO wywołują się albo lokalnie albo zdalnie dla wywołującego w zależności od tego czy pracuje od z oryginalnym obiektem czy z proxy do niego.

W przypadku obiektów MBVO zarówno klient jak i serwer muszą znać pełną definicję klasy obiektu. Serwer po to aby utworzyć obiekt i przekazać go do klienta, a klient aby odtworzyć go po swojej stronie. W przypadku obiektów MBRO nie jest to konieczne ponieważ obiekty te szeregowane są przez proxy. Aby utworzyć proxy wystarczy znajomość interfejsu. Dokładną definicję klasy musi więc znać tylko strona udostępniająca obiekt tej klasy.

25/03/2009

Synchronizacja - wydajność

Home

Niedawno opublikowałem post dotyczący prymitywów synchronizacyjnych. Przy tej okazji zostałem zapytany czemu użycie prymitywów takich jak semafor czyli implementowanych po stronie systemu operacyjnego jest wolniejsze. Odpowiedź zamieściłem w odpowiedzi do komentarz. W tym poście chciałem przedstawić jeszcze wyniki krótkiego testu jaki przeprowadziłem. Dotyczył on zbadaniu wydajności rozpatrywanych wcześniej prymitywów i polegał na wielokrotnym wchodzeniu i wychodzeniu do/z sekcji krytycznej przez dwa watki. Sekcja krytyczna była oczywiście zabezpieczonej przez te prymitywy. Do pomiaru czasu użyłem klasy Stopwatch. Wyniki są zgodne z tym co napisałem. Zamieściłem je poniżej.