簡單描述下俺要廢話的背景吧
,這幾天都在排查乙個bug:silverlight客戶端應用中的某個控制項,會因為多次操作而導致瀏覽器記憶體飆公升,至於飆公升的速度嘛,差不多操作半個小時後,瀏覽器估計就累死了……
接到這個棘手的活兒後,先大概捋了一下自己的思路:
1. 復現問題:並掌握問題復現的「規律」。
2. 熟悉問題控制項的生命週期:一方面是控制項的需求功能,一方面是控制項的**實現。
3. 用階段排除法定位可疑**段:主要是通過除錯、觀察,逐漸縮小問題包圍圈。
4. 仔細研究可疑**段:盡量能夠連其上下文都要進行了解,以避免引入新的問題。
5. 思考具體的解決方案,並進行可行性嘗試。
6. 修改**,並更新。
乍看上去,還是很「美好」的
發現問題是因為載入的silverlight控制項的內容較大,所以導致載入的物件比較大,此外,最主要的還是因為每次操作都會導致乙個新的物件生成,於是很直接地就想到了,時不時有一些資源無法被gc放掉,於是導致了記憶體溢位呢?既然選擇了這條路,那麼就要一路走到底了,首先先把該控制項涉及到的內容進行分類,然後逐一地進行刪減以排查最終的「記憶體殺手」到底是誰……不過運氣不好,發現通過silverlight載入控制項的時候可能會導致一些模板類的資源無法得到釋放,但是經過單獨的demo測試又沒有重現問題
但是問題還要解決的,於是再次重新review全部功能**,發現在第一開始確定解決問題思路的時候,貌似自己遺留了關鍵的一點:「每次建立新物件……」,好吧,這是自己馬虎了,總想著從縱向地**問題,但是沒有想到從橫向去解決問題,如果我能保證所有對該控制項公共屬性面板的引用只有乙個的話,是不是問題就解決了呢?答案是:yes!
雖然不可思議,但問題終於是解決了,雖然還留下一點兒小小的遺憾……
回過頭來看看這次的經歷,還是有所收穫的:
1. 首先,在排查問題的時候,做做小計畫還是很有必要的;
2. 再者,一旦定位問題的大致原因,不要急著按照自己想到的第一種方法深入,不妨再想想有沒有其他的辦法來解決問題;
3. 不管你信不信,有的時候,我們可能找不到最終的原因,但我們必須要解決問題!這一點可能存在爭議,但我覺得在面對上線在即的產品研發的最後階段,是可以適當採取一些「妥協」的方案的,但這並不意味因為困難,這問題就不解決了,我們完全可以放到後面的時間再去深入地解決。
以上就是自己在這次經歷後的一點小小體會,分享給大家,希望能對大家有所幫助!~
AC後的一點小感想。。。。。
今天是2014.6.8,綜合接觸acm已經快乙個半月了,有很多很多收穫,acm就是演算法和資料結構的學習,學的是一種思維。其實呢 之前就想寫部落格,但是不知道寫啥,今天就先寫點東西放著吧 等再過些時日,開始學那些大神們 寫解題報告。目前基礎演算法都基本學會了,擴充套件歐幾里得,中國剩餘定理都已經接觸...
Firtex的乙個小bug
症狀 索引如有字段無 一 資料,索引過程異常 原因 如該字段有資料,在索引中會生成norm檔案 b.nm檔案,b為索引桶序號,m為字段序號 合併過程中會開啟該檔案,寫入臨時檔案 mid 0 0.nm m為字段序號 由於索引過程中自始至終無資料加入該欄位,索引該 b.nm檔案不存在,開啟失敗導致異常 ...
關於結構體的一點小知識
用結構體建立鍊錶 struct student 其中成員num和score用來存放結點中的有用資料 使用者需要用到的資料 next是指標型別的成員,它指向struct student型別資料 這就是next所在的結構體型別 使幾個不同的變數共占同一段記憶體的結構 稱為 共用體 型別的結構。定義共用體...