gpt4 book ai didi

solrnet - solr.Add(doc) 瓶颈

转载 作者:行者123 更新时间:2023-12-04 05:40:36 27 4
gpt4 key购买 nike

Win 7/SolrNet 0.4.0/C# winforms .net 4.0 客户端。

我正在使用 Solrnet 和一个 winforms 线程应用程序将多个位图和一些数学描述符写入 Solr 实例(在不同的服务器上)。有趣的是 solr.Add 方法似乎显着减慢了应用程序的速度。即,如果我注释掉添加和提交方法,CPU 利用率会跃升至 90% 左右,但随着它们的工作,CPU 利用率约为 20% - 但是似乎文档正在写入 Solr。

这是预期的行为吗? Solr 写入会成为瓶颈吗?我怎样才能解决这个问题?

            var doc = new IndexDocument
{
_UUID = Guid.NewGuid().ToString(),
_FileName = (FileName),
};

//// Bitmap is not thread safe we Need to make a copy for each Task and done so synchronously.
Bitmap[] blobCopies = MakeBlobCopies(bmpBlob, 2);

Task<List<KeyValuePair<string, double>>>[] descriptorTasks = new Task<List<KeyValuePair<string, double>>>[2];
descriptorTasks[0] = Task.Factory.StartNew<List<KeyValuePair<string, double>>>(() => ApplyDescriptor1(blobCopies[0]));
descriptorTasks[1] = Task.Factory.StartNew<List<KeyValuePair<string, double>>>(() => ApplyDescriptor2(blobCopies[1]));

Task.WaitAll(descriptorTasks);
foreach (var t in descriptorTasks)
{
List<KeyValuePair<string, double>> flds = t.Result;
foreach (KeyValuePair<string, double> fld in flds)
{
Type type = doc.GetType();
if (!String.IsNullOrEmpty(fld.Key))
{
SetPropertyValue(doc, fld.Key, fld.Value);
}
}
}

DisposeBlobCopies(blobCopies);

solr.Add(doc);
solr.Commit();

最佳答案

solr 调用可能是您应用程序中的瓶颈,因为它们会阻止 io 命中。添加和提交是对 Restful api 的 2 个不同调用。我几乎肯定 solrnet 在他们的 api 中没有本地支持来执行异步调用,但看起来您知道如何使用任务并行库。使调用非阻塞,事情应该加快。您可能会发现有必要控制并发量。

关于solrnet - solr.Add(doc) 瓶颈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11302005/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com