2

大量のデータを可能な限り迅速かつ確実にインポートするコードを作成しようとしています。スレッドを使用すると、ローカルマシンで作成したインポートコードを大幅に高速化できましたが、リモートサーバーで実行すると、WCFに問題があるようです...

2つのWCFサービス実装があります:Service1とService2。

基本的にこれはワークフローです:

Parallel.ForEach(objectData.Tables[0].Rows.Cast<DataRow>(), dataRow =>
{
...
    Service1.ImportObjectFirstPart(ObjectToEnter);
...
    Service2.ImportObjectSecondPart(ObjectToEnter);
}

Service1の呼び出しには約3秒かかり、service2の呼び出しにはリモートとローカルの両方で約7秒かかります。ただし、私のローカルマシンでは、service2への呼び出しは約20回のservice1呼び出しの後に開始されます。サーバーでは、ほとんどすべてのservice1呼び出しが、最初のservice2呼び出しが開始される前に終了しました。(両方のサービスはPerCallとして実装されます)。

サービスを呼び出すコードは、しばらくの間予想どおり99%のCPUを使用し、その後クロールが遅くなり、自分で終了する必要があります。何がうまくいかない可能性があるか考えていますか?

ありがとう、

4

1 に答える 1

1

やってみました

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]

ここで詳細を読むことができます

http://msdn.microsoft.com/en-us/library/system.servicemodel.servicebehaviorattribute.concurrencymode.aspx

デフォルトは single であるため、得られる動作はかなり正当なものであると期待する必要があります。

于 2012-04-24T14:16:39.837 に答える