我一直在使用Web应用程序遇到Javascript Out Memory错误,该应用程序加载Google Map并从一个点连续移动到另一个点。它需要大约半天的时间才能用尽内存,但是我真的希望它能持续更长的时间。一世
已经确定使用map.panTo方法时发生了内存泄漏,尽管
我非常怀疑这可能是我使用它的方式(JavaScript不是我的强项
适合)。您能否看一下这段代码,并帮助我解决此内存泄漏?为了加快调试速度,我加快了在此演示代码中进行平移的间隔(即使通过检查Windows Task Manager中的进程,泄漏也很明显)。这是基于ASP .Net 3.5 Web窗体的,但是没有PostBacks,并且代码完全是HTML,CSS和Javascript。它泄漏了IE中最差的泄漏(这是我需要用来显示此泄漏的信息)。

编辑:


我尝试使用其他版本的Google Maps API(2、3.0和3.6)。
我知道我不需要将示例代码中的映射放入Hashtable或Array中,但这无论如何都不会影响内存泄漏。
我正在努力避免黑客入侵,例如经常刷新页面或使用静态Google Maps API。
赏金会去找解决内存泄漏的人,或者清楚地标识并证明为什么不能解决的人(如果是这样的话)。


码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Map Shifter</title>
    <style type="text/css">
        #divMap { height: 400px; width:400px; position:absolute; top:10%; left:10%; border: 2px solid #ff1100; }
    </style>
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?v=2&sensor=false"></script>
    <script type="text/javascript" language="javascript">
        //Have tried both HashTable and Array (Both Leak)...
        var m_arrMaps = new HashTable(); //new Array();
        var m_Timer;
        function HashTable() {
            return this;
        }
        function LoadMapAndStartShifting() {
            var objMapCenterPoint = new google.maps.LatLng(20.5, -156);
            var objMapOptions = { zoom: 9, center: objMapCenterPoint, mapTypeId: google.maps.MapTypeId.ROADMAP,
                scaleControl: false, streetViewControl:false, zoomControl: false, mapTypeControl: false, panControl: false
            }
            var map = new google.maps.Map(document.getElementById("divMap"), objMapOptions);
            m_arrMaps["ShiftingMap"] = map;
            setTimeout("ShiftMap(20.5, -156);", 700);
        }
        function ShiftMap(decLat, decLng) {
            var objLatLong = new google.maps.LatLng(decLat, decLng);
            //Have tried setCenter instead of preferred panTo and it still leaks!
            m_arrMaps["ShiftingMap"].panTo(objLatLong);
            if (decLat == 20.5) {
                //Leaks...
                ResetTimer(39, -87);
            }
            else {
                //Still leaks...
                setTimeout("ShiftMap(20.5, -156);", 700);
            }
        }
        function ResetTimer(decLat, decLng) {
            m_Timer = setTimeout("ShiftMap(" + decLat + ", " + decLng + ");", 700);
        }
    </script>
</head>
<body onload="LoadMapAndStartShifting();">
    <form id="form1" runat="server">
    <div id="divMap"></div>
   </form>
</body>

最佳答案

使用JavaScript遍历数据后,您可以尝试刷新页面。这可能会释放页面上运行的脚本正在使用的内存:

How to redirect to another webpage in JavaScript/jQuery?

09-10 11:04
查看更多