所以我做了我以前应该做的,只是创建了一个插件来测试它。这是在我的本地 VM(预操作)上的 CRM 2013 上运行的,因此结果可能会有所不同,但我看到普通的旧 Create 每 100 个实体减少约 290 毫秒
我首先创建了这个插件
public class ExecuteMultipleTester : PluginBase
{
protected override void ExecuteInternal(Common.Plugin.LocalPluginContext pluginContext)
{
var watch = new Stopwatch();
var service = pluginContext.OrganizationService;
watch.Start();
var request = new ExecuteMultipleRequest
{
Settings = new ExecuteMultipleSettings
{
ContinueOnError = false,
ReturnResponses = false,
},
Requests = new OrganizationRequestCollection()
};
for (var i = 0; i < 100; i++)
{
request.Requests.Add(new CreateRequest
{
Target = new new_Year
{
new_Year = i + "- B",
new_YearIntValue = i,
}
});
}
service.Execute(request);
watch.Stop();
var multipleCreate = watch.ElapsedMilliseconds;
watch.Restart();
for(var i = 0; i < 100; i++)
{
service.Create(new new_Year
{
new_Year = i + "- A",
new_YearIntValue = i,
});
}
watch.Stop();
throw new InvalidPluginExecutionException(String.Format("ExecuteMultipleRequest Time was: {0}ms, Standard was: {1}ms", multipleCreate, watch.ElapsedMilliseconds));
}
}
注册插件并运行 10 次测试。以下是结果(ASCII 表,哦,是的!):
+------------------+---------------+-------+
| Execute Multiple | Sevice.Create | Diff |
+------------------+---------------+-------+
| 777 | 408 | 369 |
| 493 | 327 | 166 |
| 614 | 346 | 268 |
| 548 | 331 | 217 |
| 577 | 312 | 265 |
| 675 | 313 | 362 |
| 574 | 318 | 256 |
| 553 | 326 | 227 |
| 810 | 318 | 492 |
| 595 | 311 | 284 |
+------------------+---------------+-------+
| Average Diff: | 290.6 |
+------------------+---------------+-------+
因此,根据这些结果,无需在插件中执行 ExecuteMultipleRequest。您已经在服务器上,必须执行更多代码才能执行相同的操作。
更新 1 - 1000 针对完整环境创建测试
我再次运行此测试以创建 1000 条记录,并在一个完整的环境中使用单独的 SQL、服务和 Web 框。非常相似的结果(只进行了 5 次测试,因为它需要更长的时间)
+------------------+----------+--------+
| Execute Multiple | Standard | Diff |
+------------------+----------+--------+
| 18922 | 15057 | 3865 |
| 18668 | 14946 | 3722 |
| 18162 | 14773 | 3389 |
| 19059 | 14925 | 4134 |
| 18334 | 15306 | 3028 |
+------------------+----------+--------+
| | Average | 3627.6 |
+------------------+----------+--------+
有趣的是,对于 10 倍的记录,时间大约延长了 25 倍,但差异只有 12 倍。(尝试进行更新而不是删除,但我不断收到超时错误,即使每个错误只有一个......一定是在创建某种无限循环,只是不确定是什么......)
对于 1000 次创建,它慢了近 4 秒。我不会在我的插件中使用它...