Huhu ihr Profis!
Ich stehe mal wieder vor einem kleinen Rätsel ;)
Ich habe ja gelesen, dass bei, ich nenne es mal gegenseitigen Referenzierungen z. B. der IE nicht erkennen kann, ob er den Speicher wieder freigeben kann.
nun habe ich folgende Funktion, zu erkennen ist eine leicht abgewandelte version einer standard AJAX-funktion aus dem "Lehrbuch" *g*
var running_ajax_requests = new Array();
function request_fkt(ziel,post,parameter)
{
if(!post) ziel="../../ajax.php?" + ziel;
else ziel="../../ajax.php";
xmlHttp = null;
try {
// Mozilla, Opera, Safari sowie Internet Explorer (ab v7)
xmlHttp = new XMLHttpRequest();
} catch(e) {
try {
// MS Internet Explorer (ab v6)
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
try {
// MS Internet Explorer (ab v5)
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
xmlHttp = null;
}
}
}
if (xmlHttp)
{
running_ajax_requests.push(xmlHttp);
xmlHttp=null;
akt_ajax_req_index=running_ajax_requests.length-1;
if(!post) running_ajax_requests[akt_ajax_req_index].open('GET', ziel, true);
else running_ajax_requests[akt_ajax_req_index].open('POST', ziel, true);
running_ajax_requests[akt_ajax_req_index].onreadystatechange = function ()
{
if (this.readyState == 4) {
if(this.responseText!="1")
{
response=this.responseText;
try
{
// alert(response);
eval(response);
}
catch(e)
{
// fehlerbehandlung
}
}
}
for(i=(running_ajax_requests.length-1);i>=0;i--)
{
if(running_ajax_requests[i].readyState==4)
{
running_ajax_requests[i]=null;
running_ajax_requests.splice(i,1);
}
}
};
if(!post) running_ajax_requests[akt_ajax_req_index].send(null);
else
{
running_ajax_requests[akt_ajax_req_index].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
running_ajax_requests[akt_ajax_req_index].setRequestHeader("Content-length", parameter.length);
running_ajax_requests[akt_ajax_req_index].setRequestHeader("Connection", "close");
running_ajax_requests[akt_ajax_req_index].send(parameter);
}
}
else return "konnte XMLHttpRequest nicht initialisieren";
}
ich habe also versucht, indem ich ein array mit allen laufenden requests habe und dieses jedesmal nach abgeschlossenen requests durchsuche um diese dann zu entfernen, diesen speicherfreigabefehler zu umgehen, jedoch sehe ich im taskmanager, wie der speicherbedarf des IE von 60 MB immer stetig steigt .. nach 10 minuten nun steht er bei 577 MB ...
Firefox geht mit 106 MB ins Rennen, und scheint dann immer so zwischen 150 und 230MB zu schwanken, ergo scheint hier der Müllsammler soweit zu funktionieren
hat jemand eine idee, wie ich das sauber lösen kann? (nein, ich möchte keine fertigen frameworks dazu verwenden ;)
LG euer SorgenkindMech