采用以下方式来消费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方法,性能等可能是一个很好的实现吗?
答案 0 :(得分:2)
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服务。
答案 1 :(得分:0)
您可能希望创建此服务操作的“批量”版本,以允许它将列表作为参数(在这种情况下为MyList)。然后,这个新操作将为每个元素调用相同的业务逻辑,并将结果作为一个整体返回。
这可以减少开销。但是不要忘记调整Max * MessageSize配置参数以应对该情况下涉及的潜在重要消息。