Win 7/SolrNet 0.4.0/C# winforms .net 4.0 クライアント。
Solrnet と winforms スレッド アプリケーションを使用して、複数のビットマップといくつかの数学的記述子を Solr インスタンス (別のサーバー上) に書き込みます。興味深いのは solr.Add メソッドで、アプリの速度が大幅に低下するようです。つまり、add & commit メソッドをコメントアウトすると、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();