小背景
我正在嘗試使用 Intersystems IRIS Api 以防您想查看它。 https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=BNETNAT_refapi#BNETNAT_refapi_iris-iterator
所以基本上我有這樣的東西(不是實際的代碼)
string global = "myGlobal";
object subs = new object[2];
subs[0]="node1";
subs[1]="node2";
IRISIterator iter = iris.GetIRISIterator(global, subs); //Returns IEnumerator
foreach(var item in iter)
{
//for simplicity just printing it, actual code will process the data
Console.WriteLine(iter.CurrentSubscript.ToString());
}
它運行非常緩慢,讀取 50 條記錄需要將近 4 秒。所以我的問題是,鑒于我對 GetIRISIterator 沒有任何控制權,是否有可能提高上述代碼的性能?我可以進行某種型別的并行處理或異步執行以減少時間嗎?
uj5u.com熱心網友回復:
每次.MoveNext()呼叫該方法以前進到下一項時,迭代器可能會執行一些緩慢的操作。這可能是由訪問某些外部系統(如資料庫)的開銷引起的,并且每個專案都可能產生這種開銷。
所以我要嘗試的第一件事是不使用GetIRISIterator,似乎有一個GetIRISList回傳串列。對于完整串列,這可能只遭受一次開銷。
并行處理不太可能改善任何事情,因為它是獲取專案需要時間,而不是專案的處理。
異步執行不會減少所花費的時間,但它可能會通過向用戶顯示系統正在處理請求而不僅僅是掛起來改善用戶體驗。
每當討論性能時,我都會建議進行適當的測量。使用性能分析器可能會很有幫助,因為它可能會告訴您大部分時間都花在了哪里。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/424799.html
