Похоже, вы храните только один элемент в объекте "Hashtable" - ["ShiftingMap"] - он не содержит карты, он содержит одну карту.Вы можете просто использовать глобальную переменную для хранения объекта карты.
Единственное повторяющееся распределение - это new google.maps.LatLng(decLat, decLng)
, который создается для каждого панорамы.
Предложения:
1) Документы для LatLng не дают никаких предупреждений о необходимости явного освобождения объектов, поэтому, вероятно, сборщик мусора должен с этим справиться.
2) Подумайте об общей проблеме - выпытаетесь непрерывно перемещаться по карте Google в течение 6 часов и более.Как вы думаете, почему утечка в вашем коде?Скорее всего, проблема в G Maps.Возможно, загруженные фрагменты изображения карты хранятся локально, поскольку вполне вероятно, что пользователь захочет выполнить панорамирование назад.
В качестве теста попробуйте панорамирование между двумя точками, а не текущее панорамирование по всейземной шар.(Если я правильно понимаю ваше относительное смещение.)
Проверьте, происходит ли утечка со скоростью памяти / час
3) Убедитесь, что разные браузеры по-разному влияют на вашу проблему.Попробуйте Google Chrome.
Добавлено
Я заново обработал ваш демонстрационный код, чтобы вывести вызов LatLng из цикла, и он все еще протекает.Кроме того, лучше всего использовать не строковое значение в вызовах setTimeout
, поэтому я тоже это изменил.Я также использовал руководство по Maps API , чтобы установить для типа документа то, что они рекомендуют.
Результат ниже.Утечки на FF и Chrome.Я подал сообщение на официальном форуме API Карт Google v3 .
Кажется очевидным, что метод .panTo
протекает.Я полагаю, что ваш следующий шаг - проверить, отвечает ли Гуглер на сообщение.
Демонстрационный пример теста
Переработанный тестовый пример:
<!DOCTYPE html>
<html>
<!-- http://sandbox.kluger.com/map_demo.html -->
<!-- See tutorial http://code.google.com/apis/maps/documentation/javascript/tutorial.html -->
<head>
<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?sensor=false"></script>
<script type="text/javascript" language="javascript">
// Globals
var map,
mapCenterPoints,
currentPoint;
var ShiftMap = function() {
currentPoint = currentPoint == 0 ? 1 : 0; // update
map.panTo(mapCenterPoints[currentPoint]);
setTimeout(ShiftMap, 700);
}
function LoadMapAndStartShifting() {
mapCenterPoints = [new google.maps.LatLng(20.5, -156),
new google.maps.LatLng(39, -87)];
currentPoint = 0;
var objMapOptions = { zoom: 9,
center: mapCenterPoints[currentPoint],
mapTypeId: google.maps.MapTypeId.ROADMAP,
scaleControl: false, streetViewControl:false,
zoomControl: false, mapTypeControl: false,
panControl: false
}
map = new google.maps.Map(document.getElementById("divMap"),
objMapOptions);
setTimeout(ShiftMap, 700);
}
</script>
</head>
<body onload="LoadMapAndStartShifting();">
<div id="divMap"></div>
</body>
</html>