Dart HttpRequest polling

我的梦境 提交于 2019-12-10 07:22:25

问题


I have a web app that have a Timer that fires a poll to get data every 3 seconds. It works fine for about 2.5 minutes then Chromium crashes.

My request Dart looks like this

HttpRequest.getString('data/get_load_history_recent.json')
  .then((e) => _recentHistoryResponse(e))
  .catchError((e) => _recentHistoryError(e));

Can you think of any reasons why this would happen? I assume it's a memory leak...

Edit: Here is my _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);

  }
}

I have commented out the exists check !LoadHistoryHelper.exists(oldIdsArray, dataVO.loadID)) (because this seemed like the obvious place) but it the VM still crashes.

Also, I have taken this same code and put it into an isolated app with the only real difference in the poll check is appDataDic.load_history_list is just an @observable List, not an ObservableList.

Edit 2 : Ok, so I have discovered that Map obj = JSON.decode(data); causes the crash. I was reading in a Javascript forum that timeouts cause the memory to not be released (I had never thought of this but it makes sense), is this true? Can any one think of a better way to do this? Can I directly call the garbage collection? I'm running out of ideas.


回答1:


There's another question here, suggesting a memory leak in HttpRequest; however I'm not able to find anything in the Dart issue tracker. If you think this might be a real memory leak, it might be worth raising a bug.



来源:https://stackoverflow.com/questions/19964610/dart-httprequest-polling

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!