修正IEWebControls中TreeView的一處bug

狀況:多臺Web服務器作負載平衡時,如果將XML字符串流作爲數據源賦給TreeView,速度將很慢。
一般情況下不會發現,但是確實存在regular_smile.gif

原因:TreeView和TreeNode數據綁定時是先將傳入的XML當作URL處理,出錯後才當作XML流。而在多臺服務器的情況下由於頁面在那臺機器是不確定的,也就是說其URL不確定,是由負載平衡機制實時定向到某臺服務器的。

修正方法:
增加一屬性TreeNodeSrcIsXmlStream設置XML是否爲字符串流。
修改方法ReadXmlSrc
說明:先根據屬性來判斷是否爲XML,而不是用異常處理來判斷

完善點則再增加一方法IsXml在取屬性時調用,如果屬性爲空則用此方法判斷TreeNodeSrc的類型
功能:判斷字符串是否爲XML
參數:string str   要判斷的字符串


源碼:
try
{
 reader = GetXmlReaderFromUri(TreeNodeSrc, TreeNodeXsltSrc);
 bReading = reader.Read();
}
catch
{
 // couldn't read.  Try TreeNodeSrc as a string.
 reader = GetXmlReaderFromString(TreeNodeSrc, TreeNodeXsltSrc);
 if (reader != null)
  bReading = reader.Read();
}

改爲:
if(TreeNodeSrcIsXmlStream)
{
 reader = GetXmlReaderFromString(TreeNodeSrc, TreeNodeXsltSrc);
 if (reader != null)
  bReading = reader.Read();      
}
else
{
 reader = GetXmlReaderFromUri(TreeNodeSrc, TreeNodeXsltSrc);
 bReading = reader.Read();
}

htc中可能也存在,沒看代碼,要改的話原理一樣。

結論:
用try...catch...這種異常處理機制來進行條件判斷是不好d行爲。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章