私はいくつかの検証サービスを構築しています。
private static void Main(string[] args)
{
var service = new ValidationManager();
service.Start();
System.Console.ReadLine();
service.Stop();
}
ValidationManager
チェックする入力を受け取るメソッドThreadPool
を実行するために使用します。Validate
問題を単純化するために、Validate
メソッドは正規表現チェックを行うだけです。スレッドが検証を終了した後、結果を DB に保存する必要があります。DB を保存しないと、サービスは 10 秒以内に 60,000 回の検証を行います。DB 保存では、約 5,000 回の検証を行います。パフォーマンスを向上させるために、BulkManager
スレッドから検証結果を受け取り、その結果をまとめて DB に保存するものを使用します。BulkManager
自身ThreadPool
を使用してバルクを DB に保存します。これで改善されました。現在ValidationManager
、約 11,000 件の検証を行っています。
BulkManager
別のプロセスに切り離すことができれば、さらに改善さValidationManager
れると思いました。そこで、同じソリューションでコンソール WCF サービスを作成しました。netNamedPipeBinding
[ServiceContract]
public interface ISqlBulkWCFService
{
[OperationContract]
void SaveLog(string email, string summary);
[OperationContract]
void SaveFinalResult(string email, byte resultType, string summary);
}
public class SqlBulkWCFService: ISqlBulkWCFService
{
public void SaveLog(string email, string summary)
{
}
public void SaveFinalResult(string email, byte resultType, string summary)
{
}
}
プロジェクトに webservice 参照を追加しValidationManager
、代わりに do sqlManager.SaveLog(...)
I do を実行しsqlBulkWCFServiceClient.SaveLog(...)
ました。しかし、今でValidationManager
は100 回の検証のみを行います。
1 つのプロセスが検証を行い、もう 1 つのプロセスが DB に保存するため、高速になると思います。また、クライアントとサーバーが同じマシンにあるため、WCF サービスとの通信は高速になると思いました。私の間違いはどこですか?