J'ai écrit un gadget pour Windows Sidebar. Cela signifie essentiellement que c'est une page web miniature, qui dure des mois. Après quelques semaines, l'utilisation de la mémoire (jeu de travail) du processus sidebar.exe hébergeant des gadgets tiers s'exécute en centaines de mégaoctets. Sans un moyen d'identifier la source des fuites de mémoire, je suppose simplement qu'il s'agit du problème de fermeture XMLHttpRequest. Bien que dans mon cas, je ne le fais pas de manière asynchrone. Donc, je suppose que c'est juste JAX plutôt que A JAX.Comment identifier, réparer, fermer la fuite de mémoire dans le gadget Windows Sidebar?
La fonction javascript impliquant le web hit:
function FetchXML(method, url)
{
var xmlHttp;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{ // Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
throw "XMLHttp not supported"
}
}
}
xmlHttp.open(method, url, false);
xmlHttp.send(null);
if (xmlHttp.status != 200)
{
throw "Server returned status code "+xmlHttp.status.toString();
}
if (xmlHttp.responseXML.parseError.errorCode != 0)
{
throw "Error in returned XML: "+xmlHttp.responseXML.parseError.reason;
}
var responseXML = xmlHttp.responseXML;
xmlHttp = null;
return responseXML;
}
Est-ce que ça ressemble pourrait jamais être la source d'une fuite de mémoire?
Je crains que sans une fermeture réelle je suis de retour à la case départ.
Vous pouvez remplacer toute votre instruction Try Catch par "xmlHttp = new XMLHttpRequest();". Seul le moteur IE est utilisé pour afficher un gadget. – ZippyV