狀況:多臺Web服務器作負載平衡時,如果將XML字符串流作爲數據源賦給TreeView,速度將很慢。
一般情況下不會發現,但是確實存在
原因: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行爲。