none
在參數中直接具現化類別的寫法好嗎? RRS feed

  • 問題

  • Target framework:

    .NET Framework 4 Client Profile

     

    問題描述:

    我要使用XmlDocument的Save方法來儲存Xml檔案,但我想要這份檔案是UTF8編碼格式,所以我寫了下面這行Code;

    xmlDocument.Save(new XmlTextWriter(filename, Encoding.UTF8));
    
    請問我直接在方法參數裡面,具現化一個XmlTextWriter物件,這樣在Save方法結束後,XmlTextWriter物件會被當成層代0回收嗎?

    2011年11月25日 下午 05:06

解答

  • 看起來是沒有其它的物件還會參考到這個XmlTextWriter, 所以它在完成Save方法後, 再遇到GC的時候會被回收掉.
    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 503 2011年11月28日 上午 12:38
    2011年11月26日 上午 08:47
    版主
  • 會比較『早一點點』被GC回收。但相較之下,會比較『難維護一點點』。

    所以在一些code convention 的建議裡面,會建議不在參數的部分,直接new或是呼叫其他function來當參數。 

     


    若您的程式碼有SQL injection的問題,在修改完畢之前,我不願意給您任何解答。因為解決了您的程式問題,造成更大的系統漏洞問題,還不如讓程式壞掉。

    請參考:SQL injection簡介與解決方式

    常用資源參考:
    小弟的blog: In 91,wiki: my wiki
    • 已標示為解答 503 2011年11月28日 上午 12:38
    2011年11月26日 下午 12:32

所有回覆

  • 看起來是沒有其它的物件還會參考到這個XmlTextWriter, 所以它在完成Save方法後, 再遇到GC的時候會被回收掉.
    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 503 2011年11月28日 上午 12:38
    2011年11月26日 上午 08:47
    版主
  • 會比較『早一點點』被GC回收。但相較之下,會比較『難維護一點點』。

    所以在一些code convention 的建議裡面,會建議不在參數的部分,直接new或是呼叫其他function來當參數。 

     


    若您的程式碼有SQL injection的問題,在修改完畢之前,我不願意給您任何解答。因為解決了您的程式問題,造成更大的系統漏洞問題,還不如讓程式壞掉。

    請參考:SQL injection簡介與解決方式

    常用資源參考:
    小弟的blog: In 91,wiki: my wiki
    • 已標示為解答 503 2011年11月28日 上午 12:38
    2011年11月26日 下午 12:32
  • 謝謝兩位大大回答,

    另外請問 91大,會比較難維護一點點這個部分問題,那如果我改寫成下面這樣的代碼

                using (XmlTextWriter xmlTextWriter = new XmlTextWriter(filename, Encoding.UTF8))
                {
                    xmlDocument.Save(xmlTextWriter);
                }
    

     

    請問會比較好一點嗎?或者有其他更好的方法可供參考嗎?

    2011年11月26日 下午 10:37
  • 我的習慣是自己定時呼叫 GC.Collect()

    交給 .Net 自動處理,適用於跑完就關掉的那種。

    都是讓 .Net 自動回收的,我是認為差別意義不大。

    你要試的話,開個測試專案,一個放在 Button1 ,一個放在 Button2

    編譯完後,用反組譯比對程式碼的差異即可。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年11月27日 上午 02:37
  • 謝謝 心冷熱情熄 大回答,

     

    謝謝提供這樣的測試方法。

    2011年11月28日 上午 12:40