zoukankan      html  css  js  c++  java
  • 【M17】考虑使用缓式评估

    1、缓式评估其实就是拖延战术,直到逼不得已的时候才去计算。缓式评估的使用场景有:

    2、引用计数,考虑String,String是一个内含char指针(char指针以''结束)的资源管理类,正常情况下,String的copy构造和copy赋值都是深层copy,也就是对char指针指向的内容做一个副本,这个效率显然很低。考虑String s2 = s1; 后面的代码可能只是读取s2,没有必要做深层copy,s2与s1可以共享一份数据,也就是使用引用计数,来实现String。但是,当修改String的时候,必须做一个深层copy,也就是拖延战术。

    3、区分读与写,考虑cout<<s2[1]与s2[1] = 'a';为什么区分读和写?读取代价很小,写需要新建一个副本,因此需要区分。问题来了,如何区分呢?对String的数据char做一层封装,即CharProxy。对CharProxy的copy赋值就是写操作,增加隐式类型转换操作符operator char() const,就是读取操作。

    4、缓式取出,考虑大型对象,内含很多个字段,为了保持一致性,这个大型对象存储在数据库。考虑需求,根据Id取出Name,如果把整个大型对象都读取出来,效率很差,因为有很多不使用的字段。更好的办法是,按需读取,需要什么取出什么。

    5、表达式缓式评估,考虑两个大型矩阵相乘,运算量很大,但是我们往往只想要结果中的一个元素。因此,更好的解决办法是,相乘后不去运算,而是返回一个假的结果(代理结果)。读取结果中的一个元素时,也不去整个计算,而是只计算结果中的这一个元素。

    6、缓式评估解决的问题是:避免不必要的计算。如果计算绝对需要,不能使用缓式评估。

  • 相关阅读:
    vue 中 vue-router、transition、keep-alive 怎么结合使用?
    vue 对列表数组删除和增加
    eclipse如何快速查找某个类
    在 eclipse 中设置每行的字数
    如何查看某个端口被谁占用
    sql只修改第一二行数据
    android真机自动化测试
    appium自动化测试中获取toast消息的解决方法【转】
    eclipse下python的selenium自动化环境的搭建
    Xpath用法官方手册
  • 原文地址:https://www.cnblogs.com/nzbbody/p/3623752.html
Copyright © 2011-2022 走看看