🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alt.pl.comp.lang.csharp
Article #9923

Re: CS, Eventy i Multicast

#9923
From: Piotr Dobrowolski
Date: Sat, 12 Nov 2005 10:02
54 lines
3401 bytes
Dnia 10-11-2005 o 14:39:39 Wiktor Zychla <user@nospam.com.eu> napisał:

>> Na przyk³ad tak:
>> Monitor udostepnia metodê "ZarejestrujMnie", metoda przyjmuje jako
>> argument Delegate oraz jaki¶ identyfikator rodzajów zdarzeñ, jakimi
>> subskrybent jest zainteresowany. Subskrybenci wo³±j± ZapiszMnie,
>> przekazuj±c swój Delegate (swoj± metodê obs³ugi zdarzenia). Dziêki temu
>> Monitor jest w stanie powi±zaæ subsrybentów z oczekiwanymi typami  
>> zdarzeñ.
>> Gdy nadchodzi zdarzenie jakiego¶ typu Monitor "przegl±da" listê
>> subskrybentów i wynajduje tych którzy s± zainteresowani danym typem
>> zdarzenia, a nastêpnie wywo³uje metodê przekazan± przez Delegate.
>> Nie do koñca eleganckie, bo nie izoluje zupe³nie Monitora od  
>> Subskrybenta,
>> ale powinno spe³niæ Twoje oczekiwania.
>
> te¿ pomy¶la³em o czym¶ podobnym, tylko zastanawia mnie jak± przewagê ma  
> to
> podej¶cie od wys³ania zdarzenia do wszystkich obiektów i niech one same
> decyduj± o tym czy s± zainteresowane czy nie w zale¿no¶ci od parametrów
> zdarzenia.
>
> w sensie projektowym ró¿nica jest na niekorzy¶æ tego pomys³u o którym  
> mówisz
> w stosunku do tego wysy³ania zdarzenia do wszystkich s³uchaczy, w³a¶nie z
> powodu braku izolacji.
>
> mo¿naby to co prawda obej¶æ projektuj±c interfejs dla subskrybenta,
> przegl±dania listy delegacji przypiêtych do zdarznia przez
> GetInvocationList(), sprawdzaniu czy typ z którego pochodzi delegacja
> implementuje ten interfejs, a nastêpnie odpytywanie siê tego obiektu o to
> czy jest zainteresowany zdarzeniem, tyle ¿e to niczego nie zmienia - i  
> tak
> dla ka¿dego subskrybenta trzeba wykonaæ kawa³ek funkcji, która sprawdzi  
> czy
> jest on zainteresowany zdarzeniem czy nie. nie s±dzê wiêc ¿eby by³a
> jakakolwiek ró¿nica na korzy¶æ w wydajno¶ci, mo¿naby to co najwy¿ej  
> zbadaæ.
>

[PD] Drobna optymalizacja powyzszego pomyslu: tworzymy Hashtable (lub  
Dictionary w 2.0), ktorej kluczem jest identyfikator item'a a elementami  
delegaty. Metoda ZarejestrujMnie dodaje delegat do elementu pod  
odpowiednim kluczem. W momencie przyjscia zdarzenia jeden strzal do  
Hashtable i wywolanie znajdujacego sie tam delegata. Zysk wydajnosciowy  
jest, chociaz przy takich ilosciach elementow o jakich kolega pisze  
(30-40)  to chyba overkill :)

P.S. przepraszam jezeli cos sie pokaszani z encodingiem - zmienilem  
czytnik. W razie czego krzyczcie ;)

-- 
Piotr Dobrowolski
Piotr.Dobrowolski@_usun_gmail.com
Technical Details
Message-ID: <op.sz4gtwmqzowjqs@da-pdobrowolski.windtelecom.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
References: <dkv4kp$jhi$1@news.onet.pl> <43733fc2$1@news.home.net.pl> <dkvik6$4un$1@nemesis.news.tpi.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
From: "Piotr Dobrowolski" <Piotr.Dobrowolski@_usun_gmail.com>
Newsgroups: alt.pl.comp.lang.csharp
Subject: Re: CS, Eventy i Multicast
Date: Sat, 12 Nov 2005 11:02:10 +0100
Organization: Wind Telecom
Lines: 54
Message-ID: <op.sz4gtwmqzowjqs@da-pdobrowolski.windtelecom.pl>
References: <dkv4kp$jhi$1@news.onet.pl> <43733fc2$1@news.home.net.pl> <dkvik6$4un$1@nemesis.news.tpi.pl>
NNTP-Posting-Host: server.turniejowa.pl
Mime-Version: 1.0
X-Trace: inews.gazeta.pl 1131789733 19437 80.53.64.178 (12 Nov 2005 10:02:13 GMT)
X-Complaints-To: usenet@agora.pl
NNTP-Posting-Date: Sat, 12 Nov 2005 10:02:13 +0000 (UTC)
X-User: powersink
User-Agent: Opera M2/8.50 (Win32, build 7700)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit