none
ListView绑定WinJS.UI.StorageDataSource后memory不断上涨 RRS feed

  • 问题

  • 开发一个图片浏览程序,用listview绑定WinJS.UI.StorageDataSource。初始时内存使用很少也就几十M,但是如果图片很多(大约10000张),使用scrollbar快速移动到后面再快速移动回前面,来回几次这样的操作内存不断上涨,最终暂满整个系统内存从而导致程序crash。

    测试了Windows 8自带的“照片”程序,内存也会上涨但是涨到500M左右就会停止。请问如何正确使用ListView绑定StorageDataSource才能避免内存上涨的问题。谢谢!

    2014年5月16日 8:10

答案

  • 你好,请参考:使用 ListView

    因为 WinJS.Binding.List 的数据存储在 JavaScript 数组中,所以它不能很好地扩展到非常大的数据集,如果项的数量超过几千,你应该考虑自定义数据源。 自定义数据源可以是同步的并可即时返回其结果,但这仅在这些结果真正即时可用时才有效。ListView 和数据源代码大多数是在主 UI 线程上执行的,且同步数据源操作会阻止该 UI 线程,从而导致应用程序无法对用户做出响应,显示为挂起。因此,如果不能即时获得数据,则采用异步方式访问数据。

    个人认为还可以通过虚拟化的方式来实现对内存的管理(VirtualizedDataSource object)这样的好处是可以有效的避免内存占用量。

    --James


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2014年5月19日 2:29
    版主
  • 关于使用VirtalizedDataSource,我建议你参考一下这个文档: How to create a custom data source

    在Step3里面有介绍到如何吧VirtalizedDataSource作为源在WinJS中使用。

    --James


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2014年5月22日 3:15
    版主

全部回复

  • 你好,请参考:使用 ListView

    因为 WinJS.Binding.List 的数据存储在 JavaScript 数组中,所以它不能很好地扩展到非常大的数据集,如果项的数量超过几千,你应该考虑自定义数据源。 自定义数据源可以是同步的并可即时返回其结果,但这仅在这些结果真正即时可用时才有效。ListView 和数据源代码大多数是在主 UI 线程上执行的,且同步数据源操作会阻止该 UI 线程,从而导致应用程序无法对用户做出响应,显示为挂起。因此,如果不能即时获得数据,则采用异步方式访问数据。

    个人认为还可以通过虚拟化的方式来实现对内存的管理(VirtualizedDataSource object)这样的好处是可以有效的避免内存占用量。

    --James


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2014年5月19日 2:29
    版主
  • 您好,谢谢您的及时答复。但是我的问题是使用WinJS.UI.StorageDataSource时的内存问题。我并没有使用WinJS.Binding.List,原因正如您所说的当数据项超过1500个左右时系统内存会被占满从而使程序被系统挂起。使用了WinJS.UI.StorageDataSource来访问file system后没有了数据项数量的限制,第一时间的内存使用情况也很好。但是当拖动listview下方的scrollbar做大范围移动多次操作后,发现内存增长十分迅速,且很难再降下来。我想问的问题是有没有什么好方法可以避免这样的内存问题。是要使用VirtalizedDataSource object吗?能给出这个object访问file system的具体用法吗?十分期待您的答复,谢谢!
    2014年5月21日 6:41
  • 关于使用VirtalizedDataSource,我建议你参考一下这个文档: How to create a custom data source

    在Step3里面有介绍到如何吧VirtalizedDataSource作为源在WinJS中使用。

    --James


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2014年5月22日 3:15
    版主