我在写小说阅读器,把每个打开的文件的内容读到内存,因为小说都很小,所以放在内存不怕太大,但是我如果打开了一本小说,再打开一本,我不会把先打开的小说的内容清除掉,在内存。所以一旦我打开多小说的时候,内存就会用比较多,这样觉得不好,不过垃圾wr给我们一个事件,这个我会在下面说。

我们很多应用会在前台用很多资源,例如我们的界面,在转入后台可以清理很多资源,如果判断用户不是马上就转回的,我们可以用新的EnteredBackground使用简单。在我的小说里面有写,我来看看我是怎么写。

在我们的App()


        public App()

        {

            this.InitializeComponent();

            this.Suspending += OnSuspending;

            EnteredBackground += App_EnteredBackground;

            LeavingBackground += App_LeavingBackground;

        }

        private void App_LeavingBackground(object sender, LeavingBackgroundEventArgs e)

        {

            //应用离开后台

            _areBackground = false;

        }

        private void App_EnteredBackground(object sender, EnteredBackgroundEventArgs e)

        {

            //应用进入后台

            _areBackground = true;

        }

        private bool _areBackground;

如果你应用没有EnteredBackground ,更新sdk 14393

如果安装了,可以修改你的文件<TargetPlatformVersion>10.0.14393.0</TargetPlatformVersion>

我们判断在我们进入后台清理我们的内存,因为小说经常不是后台就不用,我们就把我们现在使用的小说打开,其他打开小说放在内存资源全删,很简单,但是我们看官方建议是不GC.Collect();


        private void App_EnteredBackground(object sender, EnteredBackgroundEventArgs e)

        {

            //应用进入后台

            _areBackground = true;

            //清理

            var account = AccountGoverment.View.Account;//我们把所有的用户的放在用户管理

            if (account != null)

            {//我们把我们现在打开的小说除掉,其他都清空

                foreach (var temp in account.File.Where(temp => temp != AccountGoverment.View.File))

                {

                    //AccountGoverment.View.File我们打开的小说

                    //account.File 所有小说

                    temp.Str = null;

                    //我们会在加载的时候,点击小说,EaddressModel.Read()

                }

            }

        }

我们对于内存,还有在我们使用缓存,判断我们应用使用内存,垃圾wr给我们两个事件,需要我们用sdk 14393,我觉得垃圾wr这样不好,才半年就改

MemoryManager给我们几个属性,AppMemoryUsage 获取应用程序当前的内存使用率, AppMemoryUsageLevel 获取应用程序当前的内存使用率级别,AppMemoryUsageLimit 获取应用程序当前的内存使用率限制,都是只读,我们可以获取这些值来得到我们应用是不是占用太多内存。

AppMemoryUsageLimitChanging应用限制最大内存,在我们应用转入后台,我们的内存限制就会变化,然而还有很多诡异的也会让我们内存限制变化,我们可以根据内存变化,清理缓存

AppMemoryUsageIncreased我们在我们开始缓存需要我们的内存应用等级,这个事件是内存使用等级,假如我们的内存等级从小到大,那么发生,一旦发生我们就要检查我们是否清理

AppMemoryUsageDecreased我们应用内存等级下降,在我们使用内存从大到小使用,这个在我们清理很多缓存可以让我们知道不用清理,一般用是在AppMemoryUsageIncreased 有个任务CleanTask,把我们的缓存清理,然后我们有个bool,一旦AppMemoryUsageDecreased我们就设为true,那么我们的CleanTask判断true就停下。

源代码:https://github.com/lindexi/NovelRead


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

最新文章

  1. Hololens入门之语音识别(语音命令)
  2. Facebook 网络模拟工具 ATC部署及使用
  3. 【日常小问题】windows系统操作技巧
  4. Github优秀java项目集合(中文版) - 涉及java所有的知识体系
  5. 编写高质量JS代码的68个有效方法(五)
  6. swift语言实战晋级-第9章 游戏实战-跑酷熊猫-7-8 移动平台的算法
  7. 【Linux】vi(vim)起步学起来有些困难,一步一步温习
  8. org.apache.hadoop.hbase.TableExistsException: hbase:namespace
  9. openerp 经典收藏 记录规则 – 销售只能看到自己的客户,经理可以看到全部(转载)
  10. oracle查看表锁及解锁
  11. CRM odata方法 js容易出现的错误,大小写区分 Value Id
  12. shell 备份脚本
  13. 安装与配置cacti 0.8.8b
  14. MySQL 5.7 新特性之增强半同步复制
  15. BigData-‘基于代价优化’究竟是怎么一回事?
  16. 小乌龟 git ssh配置问题解决, 没有的话执行pull push会没有权限,因为没有git的ssh
  17. [Swift]LeetCode829. 连续整数求和 | Consecutive Numbers Sum
  18. java泛型的作用及实现原理
  19. Linux查看服务器配置常用
  20. 三种常见的Web安全问题

热门文章

  1. 201521123034《java程序设计》第2周学习总结
  2. 201521123110《Java程序设计》第10周学习总结
  3. SVN不出现绿色对勾的情况
  4. Eclipse rap 富客户端开发总结(11) : rcp/rap与spring ibatis集成
  5. java向前引用
  6. bookStore项目总结
  7. 来自projecteuler.net网站的练习题2
  8. asp.net core合并压缩资源文件引发的学习之旅
  9. 动易CMS - 设为首页代码和加入收藏代码(兼容各种浏览器)
  10. iOS逆向环境以及常用命令行(逆向一)