0

我有以下代码将文档索引到 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我的代码函数中。有点可以理解,因为那是我的代码等待完成的地方,但我很难找出我所有的时间都花在了哪里。

线程正在等待几乎 100%,我没有看到任何活动: 线程正在等待几乎 100% 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

4

0 回答 0