Odpovídáte na názor k článku Zkraťte si čekání na Dukea. Názory mohou přidávat pouze registrovaní uživatelé.
Uf, podruhé, tak sem dodělal to spouštění Downloaderů ve vláknech Fronteru bez duplikací Downloaderů ve zdrojovém kódu.
Oříšek byl, že v Downloaderu mám hodně metod a stejně jako v dalších programech používám globální proměnné (je to daleko jednodušší než předávání hodnot přes parametry nebo objekty). Ale tyto globální proměnné pro každý Downloader samozřejmě nesmějí sdílet ani Fronter, ani jednotlivá vlákna Downloaderů vzájemně.
Trvalo mi to 24 hodin, jako obvykle skoro v kuse.
Ušel sem 4 slepá uličky, které nefachčily:
- ThreadStatic nefunguje pro pole
- ThreadLocal vyžaduje zvlášní způsob deklarací (a mám dojem, že taky moc nefunguje)
- vytvoření nové instance třídy s globálními parametry Downloaderu ve Fronteru a předávání této instance Downloaderům přes parametr (tohle by možná chodilo, ale už to mám hotový, tak se k temu nebudu vracet)
- vytvoření nové instance třídy s globálními parametry Downloaderu až v Downloaderu
Správné ulice byly tyto:
- vytvoření nové instance třídy s globálními parametry Downloaderu ve Fronteru a předání přes proměnnou Downloaderu
- zkopírování třídy globálních proměnných přímo do Downloaderu a použítí .this v programu a metodách Downloaderu
Děkuji konzultantům za rady.
PS1
Teďky můžu pokračovat v optimalizaci paměti a časů.
PS2
Takže si budu moci vyzkušet, zda mají jet Downloadery jako samostatné procesy, nebo ve vláknech Fronteru a zvolit rychlejší variantu.