У меня есть веб-приложение, у которого есть таймер, который запускает опрос, чтобы получать данные каждые 3 секунды. Он работает нормально около 2,5 минут, после чего Chromium падает.Опрос Dart HttpRequest
Мой запрос Dart выглядит следующим образом
HttpRequest.getString('data/get_load_history_recent.json')
.then((e) => _recentHistoryResponse(e))
.catchError((e) => _recentHistoryError(e));
Вы можете думать о каких-либо причин, почему это произошло бы? Я предполагаю, что это утечка памяти ...
Edit: Вот мой _recentHistoryResponse()
void _recentHistoryResponse(String data)
{
Map obj = JSON.decode(data);
if(obj['status'] == 'success')
{
List processes = obj['data']['processes'];
List newItems = new List();
List oldIdsArray = new List();
int length = appDataDic.load_history_list.length;
for(HistoryDataVO oldVO in appDataDic.load_history_list)
{
oldIdsArray.add(oldVO.loadID);
}
for(Map process in processes)
{
HistoryDataVO dataVO = new HistoryDataVO();
dataVO.loadID = process['loadID'];
dataVO.time = process['time'];
dataVO.loadType = process['loadType'];
dataVO.fileName = process['fileName'];
dataVO.label = process['label'];
dataVO.description = process['description'];
dataVO.count = process['count'];
dataVO.progress = process['progress'];
dataVO.loadTask = process['loadTask'];
// Check if the item is currently in the list
if(length >= 1)
{
if(!LoadHistoryHelper.exists(oldIdsArray, dataVO.loadID))
{
dataVO.isNew = true;
}
}
newItems.add(dataVO);
}
appDataDic.load_history_list.clear();
appDataDic.load_history_list.addAll(newItems);
}
}
Я закомментировал существует проверить !LoadHistoryHelper.exists(oldIdsArray, dataVO.loadID))
(потому что это казалось очевидным место), но виртуальная машина все еще падает.
Кроме того, я взял этот же код и поместить его в изолированное приложение с единственной реальной разницей в чеке опроса является appDataDic.load_history_list
это просто @observable List
, не ObservableList
.
Edit 2: Итак, я обнаружил, что Map obj = JSON.decode(data);
приводит к аварии. Я читал на форуме Javascript, что таймауты заставляют память не выпускаться (я никогда не думал об этом, но это имеет смысл), это правда? Может ли кто-нибудь подумать о лучшем способе сделать это? Можно ли напрямую вызвать сборку мусора? У меня заканчиваются идеи.
Не могли бы вы разместить свой '_recentHistoryResponse()'? Если есть утечка, это наиболее вероятный преступник. – MarioP
Эй, я обновил это сейчас – robbie