【M17】考虑使用缓式评估
1、緩式評估其實就是拖延戰術,直到逼不得已的時候才去計算。緩式評估的使用場景有:
2、引用計數,考慮String,String是一個內含char指針(char指針以'\0'結束)的資源管理類,正常情況下,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、緩式評估解決的問題是:避免不必要的計算。如果計算絕對需要,不能使用緩式評估。
轉載于:https://www.cnblogs.com/nzbbody/p/3623752.html
總結
以上是生活随笔為你收集整理的【M17】考虑使用缓式评估的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【18】让接口容易被正确使用,不易被误用
- 下一篇: 做一个健康的IT人