Fråga
Jag har en applikation där jag vill visa en rutt på en karta med hjälp av googlemaps. Den är skriven i Delphi och använder komponenten TWebBrowser i en dialog som i sin tur använder Internet Explorer som är installerat i Windows. Problemet är bara att minnesåtgången är väldigt hög. Jag provade att ta upp 2 fönster med Firefox resp Explorer och göra samma manövrar i Googlemaps. Firefox låg stadigt runt 50-60 MB medan Explorer startade på 150 MB och ökade sen allt eftersom man använda kartan. Det bästa vore såklart att det fanns en Delphi komponent för Firefox, men den som finns använder en gammal version av Gecko som används av Firefox 1.5.
En annan väg att gå vore att helt enkelt starta en instans av tex Firefox med en URL till googlemaps som parameter ifrån min applikation. Det blir inte lika integrerat som den andra lösningen med jag tycker det är ganska viktigt att inte läcka minne. Har du några annat lösningsförslag?Svar
Hej Roland!
Internet Explorer är känt för att använda väldigt mycket minne och använder lika mycket minne oavsett om du kör den som COM-server eller inte. Det innebär att ditt program återlämnar minnet först när du destruerat ditt TWebBrowser objekt samt anropat CoUnitialize(). Dock skall vi påpeka att det här inte är en minnesläcka, utan att det handlar om slöseri med minne. Tänk även på att optimeringar med websurfning oftast drar iväg med mängden minne som används. För den som är intresserad av hur mycket minne som är mappat av ett program, samt hur mycket som egentligen används kan ni besöka denna adress, http://www.flounder.com/howbig.htm Men tyvärr så är det så som du säger. Med Delphi sitter du fast med antingen en gammal Gecko-motor eller med Internet Explorer som webläsar-komponent. Alternativen är att byta programmeringsspråk eller skriva din egen webläsar-komponent för Delphi. Det första alternativet kommer ge dig friheten av att använda en modernare Gecko eller varför inte rent av Webkit. Det andra alternativet ger dig samma möjligheter, men kommer troligen vara mycket jobbigare att genomföra. WebKit har blivit den nya defactor standard webbrowsern i KDE/Gnome-världen då man vill integrera en webbrowser i applikationen. Vilket dels beror på ett bra API och en snål användning av resurser. Detta är troligen en av de större anledningarna till att den används av iPhone, NeoFreeRunner och Nokia Surftablet N810. För den som väljer WebKit som webkomponent kan nedanstående länk vara intressant, http://labs.trolltech.com/blogs/2008/07/03/putting-qtwebkit-to-use-with-google-maps, exemplet är anpassat för C++-utveckling i QT-miljö. En intressant sida som jämför användning av minne mellan olika webläsare finner ni på denna adress, http://arstechnica.com/news.ars/post/20080317-firefox-3-goes-on-a-diet-eats-less-memory-than-ie-and-opera.html Lycka till…