[ sstanko78 @ 26.08.2007. 13:01 ] @
| Pravim jednu aplikaciju koja koristi dll pisam u c/c++ -u. Znači pozivam unmanaged code iz .net-a (oni su napravili jedan wraper).
Aplikacija je gotova 90%. Pojavio se problem. aplikacija periodično poziva web service. Web Service instancira objekte iz dll-a. Posle nekog vremena 5-6 sati rada WebService potpuno prestaje da odgovara. Pomoću loga sam otkrio da web service prestane da odgovara u dva slučaja:
1) pri instancirranju objekta iz dll-a
2) pri pozivu jedne metode iz dll-a (Login)
Ja mislim da u tom dll-u postoji memory leak ili bug.
Pitanje:
1) kako da otkrijem kakv je to bug ?
2) kako da handle-ujem taj bug (koji se nalazi negde u unmanaged code-u)
Taj dll se koristi za komunikaciju sa specijalizovanim serverom |
[ bjevta @ 26.08.2007. 22:09 ] @
ajd, malo, da teoretišem pred spavanje. znam da neću biti od koristi ali:
1. ako dll treba samo da dobaci podatke iz web servisa, bolje napiši svoju rutinu. nije komplikovano a nećeš morati da loviš gremline.
2. prati utrošak memorije aplikacije/dll-a da bi potvrdio da li je memory leak. mada, slaba vajda od toga, i ako jeste, nećeš biti puno pametniji.
3. izoluj problem. napravi test aplikaciju koja samo poziva taj dll i loguje se/poziva web service. Konzolna aplikacija, loguj šta se može i neka radi ceo dan ili duže.
4. kontaktiraj autora dll-a i pitaj za savet. ovo bi trebalo da uradiš pre prethodnih tačaka.
[ sstanko78 @ 28.08.2007. 09:06 ] @
Probao sam sve to. Napravio sam WinForms aplikaciju.
Otkrio sam da klase koje instanciram iz tog dll-u nemaju
destruktor (Dispose) metod. Znači konstanto zauzimaju memoriju
i to unmanaged memoriju (To sam otkrio pomoću profilera)
Postoji li način da nekako oslobodim memoriju koju zazuzimaju
ti objekti? Na google nisam ništa našao.
[ masetrt @ 28.08.2007. 10:14 ] @
Koliko ja znam u tom dll-u mora da postoji funkcija (ili pak neka metoda klase) koja ce oslobadjati memoriju. Opet konsultuj autora ili dokumentaciju. Za COM objekte popstoji Marshal.FreeCoTaskMem(IntPtr). Mozda u Marshal klasi ima nesto i za releasovanje pa je prouci.
[Ovu poruku je menjao masetrt dana 28.08.2007. u 11:28 GMT+1]
[Ovu poruku je menjao masetrt dana 28.08.2007. u 11:29 GMT+1]
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.