そのため、以前に行うべきことを行い、これをテストするためのプラグインを作成しました。これは私のローカル 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 倍に過ぎませんでした。(削除ではなく更新を試みましたが、タイムアウトエラーが発生し続けました。それぞれに1つだけでも...何らかの無限ループを作成していたに違いありません...)
1000 の作成では、ほぼ 4 秒遅くなります。プラグインでは使用しません...