2013-11-13 2 views
4

У меня есть веб-приложение, у которого есть таймер, который запускает опрос, чтобы получать данные каждые 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, что таймауты заставляют память не выпускаться (я никогда не думал об этом, но это имеет смысл), это правда? Может ли кто-нибудь подумать о лучшем способе сделать это? Можно ли напрямую вызвать сборку мусора? У меня заканчиваются идеи.

+1

Не могли бы вы разместить свой '_recentHistoryResponse()'? Если есть утечка, это наиболее вероятный преступник. – MarioP

+0

Эй, я обновил это сейчас – robbie

ответ

0

Есть еще один вопрос here, предполагающий утечку памяти в HttpRequest; однако я не могу найти что-либо в трекерном выпуске Dart. Если вы считаете, что это может быть реальной утечкой памяти, это может стоить raising a bug.

Смежные вопросы