我正在尝试搜索现有客户并返回CustomerID(如果存在)。这是我正在使用的代码:
var CustomerToFind = new Customer
{
MainContact = new Contact
{
Email = new StringSearch { Value = emailIn }
}
};
var sw = new Stopwatch();
sw.Start();
//see if any results
var result = (Customer)soapClient.Get(CustomerToFind);
sw.Stop();
Debug.WriteLine(sw.ElapsedMilliseconds);
但是,我发现它看起来非常慢,无法使用。例如,在DEMO数据集上,在我的i7-6700k @ 4GHz上使用24gb内存和SSD在本地运行SQL Server 2016 Developer Edition时,简单的电子邮件搜索需要3-4秒。但是,在我的具有10k客户记录的生产数据集上,它需要超过60秒并超时。
这是典型的使用基于合同的肥皂吗?基于屏幕的肥皂似乎更快,几乎是即时的。如果我在Microsoft Management Studio中对数据库表执行SQL选择,我也可以立即返回结果。
是否有更好的快捷方式来查询是否存在电子邮件地址=“test@test.com”的客户并返回客户ID?
答案 0 :(得分:1)
尝试使用GetList
代替Get
。它更适合"搜索smth"场景。
使用GetList
时,根据您使用的端点,还有两个优化。在Default/5.30.001
端点中,GetList
的第二个参数应设置为false
。在Default/6.00.001
端点中,没有第二个参数,但实体本身还有其他属性,称为ReturnBehavior
。将其设置为OnlySpecified
,然后将*Return
添加到必填字段,如下所示:
var CustomerToFind = new Customer
{
ReturnBehavior = ReturnBehavior.OnlySpecified,
CustomerID = new StringReturn(),
MainContact = new Contact
{
Email = new StringSearch { Value = emailIn }
}
};
或将其设置为OnlySystem
,然后在返回的实体上使用ID
来请求完整实体。