使用ThreadPools検索を通してオブジェクトリスト
-
22-08-2019 - |
質問
私はこれらのコンテナオブジェクト呼びしてのコンテナ)をリストアップしました。これらの各コンテナオブジェクトに DataItem
(血)をリストアップしました。典型的なシナリオは、ユーザーにて約15-20コンテナオブジェクト1000-5000 DataItems
います。そしてあ DataMatcher
オブジェクトを使用できる異なる種類の検索の対象にしています。これらの作業主(か数百の単位で試験していないことを極めていくためには、先に自分のコンポーネントのラインナップ申請を感じ身だと応答性を決めました"を使うと便利に ThreadPool
この課題です。このようにしてい DataItemCommandRunner 走行時のコンテナオブジェクトは、基本的に行う各委譲リストでパラメータとして各 DataItem
右;を利用したい ThreadPool
レシピを受け継ぎつのスレッドの各コンテナの検索理論的に必要として効率的にできるマルチコアコンピューターなど
これは基本的に行ってい DataItemUpdater クラスするとどうなるのかわかりません
public class DataItemUpdater
{
private Container ch;
private IEnumerable<DataItemCommand> cmds;
public DataItemUpdater(Container container, IEnumerable<DataItemCommand> commandList)
{
ch = container;
cmds = commandList;
}
public void RunCommandsOnContainer(object useless)
{
Thread.CurrentThread.Priority = ThreadPriority.AboveNormal;
foreach (DataItem di in ch.ItemList)
{
foreach (var cmd in cmds)
{
cmd(sh);
}
}
//Console.WriteLine("Done running for {0}", ch.DisplayName);
}
}
の無駄なパラメータオブジェクト RunCommandsOnContainer はいを試みることなくスレッドを使用しているが、その一つを必要とされるパラメータとします。また、設定の優先順位を AboveNormal は実験します。)
この動作のための全てがシナリオを利用した場合 AllWordsMatcher
オブジェクトタイプを探してくれ DataItem
物を含むすべての言葉を検索ではなくて、任意の言葉による、正確なフレーズまたは正規表現します。
このインターネットはモバイル somestring.Contains(eachWord)
に基づくオブジェクトの背景には、ユニット。がここにある一部の毛で全く違和感なし。
場合に RunCommandsOnContainer 運用 ThreadPool
スレッドを返しま狂った。言い文字列のようになります:
var someString = "123123123 - just some numbers";
ということ:
var res = someString.Contains("data");
で、これは実際にtrueを返しが多いのでお楽しみいただけデバッグ情報を表示しまtrueを返すために空の文字列やその他の文字列だけでは含まれません。また、ヒューマンバリューは、一時falseを返す場合でも、実際に文字列を含むデータを見た。
同レーニングマッチ対アルゼンチンの全て。なぜ疑いの ThreadPool
ない自分のコードについて教えてください。
私の RunCommandsOnContainer() コマンドの各コンテナは私のメインスレッド(ロックのUIか)を動作させることができ100%非常に良く出来た。ることはありませんが何でなのでないスキップも持っていることがあります。
しかし、すぐに使える ThreadPool
, で始まりこ 多くの項目 でよいはずがありませんが、あな発見事項です。
私が実現これは複雑な問題では痛みを伴うデバッグ、間違いなし!), も洞察力なぜ、どうすればいいをお願い申し上げます!
よろしく!
"ルーン
解決
それはあなたが投稿しているフラグメントから見ることが少し難しいですが、私はAllWordsMatcher(静的な状態を探してください)を見てしまう症状から判断します。 AllWordsMatcherがステートフルである場合、あなたはまた、あなたがスレッドごとに新しいインスタンスを作成していることを確認する必要があります。
より一般的に私は、特にマルチスレッド化する際に使用されている作業オブジェクトで、マッチング/検索プロセスに関与するすべてのインスタンスを見てみたいです。過去の経験から、問題は通常、そこにあります。 (それはあなたのビジネスデータコンテナを表すオブジェクトグラフであまりを見て簡単だ/この場合のDataItem)