我有以下代码将文档索引到 ElasticSearch 中,并想看看什么时间最长。
private void DoIndex(IEnumerable<TDocument> documents, LanguageCode languageCode, ElasticSettings elasticSettings, string indexName, List<Exception> errors)
{
var waitHandle = new CountdownEvent(1);
var bulkAll = ElasticClient.BulkAll(Project(documents, languageCode), b => b
.BackOffRetries(elasticSettings.BulkBackOffRetries)
.BackOffTime(elasticSettings.BulkBackOffTime)
.RefreshOnCompleted()
.MaxDegreeOfParallelism(elasticSettings.BulkThreadCount)
.Refresh(Refresh.False)
.Size(500)
.Index(indexName));
bulkAll.Subscribe(new BulkAllObserver(
onError: exception =>
{
errors.Add(exception);
Log.Error(exception, "ES indexing failed for batch.");
},
onCompleted: () => waitHandle.Signal(),
onNext: response =>
{
Logger.Log($"Processed {response.Page * 500} documents");
}));
waitHandle.Wait(CancellationToken);
}
当我附加一个分析器(在我的例子中是 dotTrace)时,我发现 99% 的时间都花在了Wait
我的代码函数中。有点可以理解,因为那是我的代码等待完成的地方,但我很难找出我所有的时间都花在了哪里。