服用follwing場景消費WCF方法:循環中的wcf方法?
List<TList> MyList ; // contains 1000 rows
MyWCFclient svc = new MyWCFclient;
foreach (var g in MyList){
g.field1inMyList = svc.getCalc(g.field2inMyList)
}
svc.Close();
可能是一個很好的實現以這種方式重新使用WCF方法,性能等?
服用follwing場景消費WCF方法:循環中的wcf方法?
List<TList> MyList ; // contains 1000 rows
MyWCFclient svc = new MyWCFclient;
foreach (var g in MyList){
g.field1inMyList = svc.getCalc(g.field2inMyList)
}
svc.Close();
可能是一個很好的實現以這種方式重新使用WCF方法,性能等?
getMyInt的每次調用都是它自己單獨的對話,每次調用都會帶來相當大的開銷。所以不行,如果你真的有一個循環連續1000次快速調用getMyInt,這將不是一個好的實現。但是,由於您的示例有點人爲設計(它沒有完成/返回任何內容),因此很難提出改進它的最佳方法。
編輯:我可以從您的更改中看到,您有一個包含兩個屬性的對象列表。您正在使用Web服務從另一個派生出其中一個值。因此,解決這個問題的最優化的方式,將是一次通過所有值到Web服務,像這樣:
List<TList> MyList ; // contains 1000 rows
MyWCFclient svc = new MyWCFclient;
var field2Values = MyList.Select(x => x.field2inMyList).ToArray();
var field1Values = svc.getCalc(field2Values);
for (int i = 0; i < field1Values.Length; i++)
{
MyList[i].field1inMyList = field1Values[i];
}
svc.Close();
兩個field2Values
和field1Values
是數組,並且只有一個呼叫WCF服務。
您可能希望創建此服務操作的「批量」版本以允許它將列表作爲參數(在這種情況下爲MyList)。然後,這個新操作將爲每個元素調用相同的業務邏輯並將結果作爲一個整體返回。
這應該會降低開銷。但不要忘記調整Max * MessageSize配置參數來應對這種情況下可能涉及的大消息。
柯克看到我的代碼我更新了..告訴你你的幫助 – user450191 2010-09-17 03:19:19
@ user450191,根據你的編輯修改答案。 – 2010-09-17 13:53:37