現在100%根性製作中的ASP.NET版本NNTP Reader已經有樣子看....
解決了效能問題,現在Download 400個Title都只需要最多兩秒,當中最困難是要寫很多Error Exception,例如很多人貼文沒有email或者名字都會出現問題.寫這些Error Handler反而用上我很多時間. 不過當中考量的問題很多.
說真的,ASP.NET的Newsgroup Reader,網上實在少之有少,可參考的,實在不多.但好彩在Microsoft的技術討論區上,多次得到台灣微軟MVP相助.有一些已經解開迷團
1.DataTable 還是DataSet? GridView還是TreeList?
這問題較簡單,一般網上看到的示範都會把DataTable轉至DataSet集合中.
給GridView做DataSource. 但是次製作我只需要一個DataTable,故沒需要使用DataSet.只需使用DataTable,收取所有資料後,轉至DataView便可.不需動輒都用DataSet.
至於Layout方面,考慮到Newsgroup會有[回應]文章,要做到類似Outlook Express般,回覆跟隨主文,必要要用上TreeList,但可惜.NET中沒有TreeList控件,就算有.要把Reference對照文章ID再加入TreeNodes都是十分複雜的事.雖然我嘗試在GridView中加入TemplateField,並放上Treeview,但實際出來的效果並不好.這問題日後再解決.
2. ArrayList還是Array?
這是一個較多面化的問題,兩者很相似,因為應用在不同地方有不同的好處.
以下是MSDN上Array和ArrayList的要點:
- ArrayList 並不保證已經經過排序。進行需要 ArrayList 的作業 (例如BinarySearch()) 之前,一定要先排序 ArrayList。
- ArrayList 的容量是可以保存的項目數。ArrayList 的預設初始容量為 0。隨著元素逐漸加入 ArrayList 內,也會視需要透過重新配置的方式自動增加容量。若要降低容量,可以呼叫TrimToSize()或明確地設定Capacity屬性。
- ArrayList 接受 Null 參照 (即 Visual Basic 中的 Nothing) 做為有效值,並允許重複的元素。
- Array 的容量是固定的,ArrayList 或 List 的容量卻是按照需要自動擴充的。如果 Capacity 屬性的值變更,記憶體重新配置和元素的複製會自動完成。
- ArrayList 和 List 提供加入、插入或移除元素範圍的方法。在 Array 中,您一次只可以取得或設定一個元素的值。
- ArrayList 和 List 提供了方法,可以將唯讀和固定大小的包裝函式傳回給集合;但 Array 則否。
另一方面,Array 提供了某些 ArrayList 和 List 所沒有的彈性。例如:
- 您可以設定 Array 的下限,但 ArrayList 或 List 的下限永遠為零。
- Array 可以擁有多個維度 (Dimension),而 ArrayList 或 List 則永遠只有一個維度。
- 特定型別 (Object 以外) 的 Array 具有比 ArrayList 更佳的效能,因為 ArrayList 的元素型別為 Object,而且儲存或擷取實值型別 (Value Type) 時,通常會產生 Boxing 和 Unboxing 的狀況。然而,List 如果不需要重新配置,亦即如果初始容量是清單大小上限的概數,它便具備了與相同型別的陣列相近的效能。
大部分情況下,可以使用 ArrayList 或 List 來取代陣列呼叫;它們比較容易使用,並且一般而言,具有與相同型別的陣列相似的效能。
3.如何做UUDecode?
先前的Base64 Encode已解決,現在的,是我的終極問題,因為這是牽涉到郵件中的附件解碼.
一般NNTP附件都是以UUEncode去篇碼,雖然我已經準確地得到由Begin至End中的編碼,但是怎樣Decode,再送給FileStream已是一個大問題.參考過C語言,PHP語言的Library,憑我的能力去寫一個Class是沒可能的.在Google上找,給DotNET的,同樣是少得可憐...最後在Google上找到一個C#的...我嘗試過Decode相片會出錯誤,不知為什麼.大家可以看看.
uuEncode and uuDecode in VB.NET and C#
沒有留言:
發佈留言