我建立了一些验证服务。
private static void Main(string[] args)
{
var service = new ValidationManager();
service.Start();
System.Console.ReadLine();
service.Stop();
}
ValidationManager
用于ThreadPool
执行Validate
接收输入进行检查的方法。为了简化问题 -Validate
方法只是做一些正则表达式检查。线程完成验证后,它应该将结果保存到数据库。如果不保存数据库,该服务会在 10 秒内完成 60,000 次验证。使用 DB 保存它可以进行大约 5,000 次验证。为了提高性能,我使用了一些BulkManager
从线程接收验证结果并将结果批量保存到数据库的方法。BulkManager
使用自己ThreadPool
将批量保存到数据库。这确实有所改善。现在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)
{
}
}
我添加了对项目的 web 服务引用ValidationManager
,而是这样sqlManager.SaveLog(...)
做了sqlBulkWCFServiceClient.SaveLog(...)
。但是,现在ValidationManager
只进行100 次验证。
我认为它会更快,因为一个过程进行验证,另一个保存到数据库。而且我认为与 WCF 服务的通信会很快,因为客户端和服务器在同一台机器上。我的错误在哪里?