我正在使用WebApi和Entity Framework来实现REST服务。我需要将使用情况记录到数据库中。我可以在控制器返回之前或在ActionFilterAttribute中执行此操作。我希望能够启动一个更新数据库的调用,但我不想等待完成。我希望响应返回给用户而不等待更新。
我正在考虑使用BackgroundWorker并传入对象。
任何人都有想过这是否是这样做的好方法?
答案 0 :(得分:1)
我认为您应该问自己的问题是数据库更新可以为您的总体响应时间增加多少延迟。在大多数情况下,作为请求处理的一部分进行更新将非常简单。后台工作者通常不是一个好的解决方案,但这里是与该主题相关的good read。如果您绝对需要在请求处理之外进行数据库更新,那么从可靠性的角度考虑排队机制如MSMQ,RabbitMQ等会更好。
答案 1 :(得分:0)
我认为我的性能问题与在VS2012调试器中运行有关。直接运行站点时,性能急剧提升。因此,如果在部署到测试服务器时证明这一点,我将不需要做任何“调整技巧”。
答案 2 :(得分:0)
您是否尝试过探索NLog的异步功能?我们通过包装数据库记录目标来使用NLog的异步包装器,如下所示:
<targets async="true">
<target name="dbLog" xsi:type="Database" dbProvider="sqlserver" connectionString=".." />
.
.
</targets>
使用NLog快速启动使用NLog登录MS SQL DB here 此外,您可以使您的日志记录方法调用async(需要.NET 4.5),如果您不关心结果,请选择不等待方法执行。 查看this SO Thread以获取示例NLog.config。