Odstranění komponenty   zodpovězená otázka

VB.NET, WinForms

Zdravím...

používám jednu komponentu (Active X) pro webovou kameru se kterou se jinak nedá spojit.

Tato komponenta kontroluje vícero kamer postupným připojováním. Bohužel je s ní problém a při novém připojení na jinou kameru to celé spadne bez nějaké další chyby. Aby to nepadalo, tak jsem to obešel systémem odstranění a nového vytvoření komponenty na formuláři.

Dotaz:

Lze nějak "úplně" odstranit komponentu z formuláře?

Pro její vytvoření používám podobný kód:

        axc.Name = "AxCSQ21"
        Me.Controls.Add(axc)

Pro její odstranění pak tento kód:

        Me.Controls.RemoveByKey("AxCSQ21")

problem je ten, že každým odstraněním a novým vytvořením to zežere cca 5 - 6MB paměti.

Zkoušel jsem to ovládat z jiného formuláře a na jiném formuláři to vytvářet a mazat pomocí Me.Controls.Clear ale to sežere dokonce něco kolem 11MB.

Má někdo nějaký nápad?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jedná se o klasický memory leak, který rozhodně nevyřešíte tím debilním přidáváním/odstraňováním z kolekce Controls. Buď je špatně napsaná ta ActiveX komponenta a potom s tím neuděláte nic (leda zkusit sehnat nejnovější verzi), nebo (to spíš) s tou komponentou pracujete špatně (třeba má nějaké inicializační/deinicializační metody, které jsou popsané v dokumentaci). Pokud se jedná o nějakou lepší IP kameru (Axis Communications), tak ta se dá normálně ovládat nebo z ní stahovat pomocí HTTP protokolu (HttpRequest, HttpResponse).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

je to nejakej ťamanskej výrobek, tak komponenta je volaná přes Internet explorer pomocí ActiveX. Žádná dokumentace k tomu není, ani špatná ani dobrá. Když třeba odpojím komponentu od kamery a chci ji připojit znovu, tak spadne celá aplikace bez nějaké chyby. Je to spíš špatně napsaná komponenta než to že bych s ní špatně zacházel. Dost možná to dokazuje i to, že Internet Explorer 8 ji nedokáže ani správně nainstalovat.

Samotnou kameru nelze ovládat jinak než přes ActiveX, to znamená že kamera je na jiném prohlížeči než Internet exploreru nepoužitelná.

Vyřešil jsem to, je to sice velmi nestandardní a dost možná i prasácké řešení, ale svůj účel to plní. Udělal jsem to tak že jsem napsal aplikaci která, která se spouští a jako parametry jsou ji předány IP, port, jmeno a heslo ke kamere, tato aplikace se pak připojí a postahuje aktuální obrázek a zase se odpojí a ukončí, to vše na pozadí. Aplikace v popředí obázky zobrazuje a spouští aplikaci s parametrama.

Jde o aplikaci sledující 20 kamer v různých místech, přes internet, a přestože živý náhled by mi vyřešil i problém s memory leakem, tak to akto nelze řešit, protože kamery nejsou v lokální síti ale na internetu a 20 kamer přes dostupnou datovou linku neprotlačím, nehledě na to že ji potřebujeme využívat i k dalším věcem než jen sledování kamer. Takže proto sem "rotoval" kamery jednyu za druhou a zobrazoval jejich obrázek.

Nyní to tak funguje, pro naše účely to stačí a funguje to dobře. Paměť se uvolní ukončením aplikace a hlavní řídící aplikace neboptná, po spuštění má 19MB a po 8 dnech provozu má 20,2MB.

PS: děkuji za rady

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback