Article View: alt.pl.comp.lang.csharp
Article #9923Re: CS, Eventy i Multicast
From: Piotr Dobrowolski
Date: Sat, 12 Nov 2005 10:02
Date: Sat, 12 Nov 2005 10:02
54 lines
3401 bytes
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-mailReferences:
<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