C# 如何有效地将100到1000次操作记录到数据库中

C# 如何有效地将100到1000次操作记录到数据库中,c#,database,performance,fluent-nhibernate,C#,Database,Performance,Fluent Nhibernate,我目前有一个场景,其中1000个动作可能在几秒钟内发生,我需要将所有这些动作存储在数据库中 我目前所做的是保留一个空闲计时器,一旦这个计时器达到预定义的时间,我将执行缓存的操作(自上次提交以来的操作-这只是一个简单的列表)并将这些操作提交到数据库 用户界面需要尽可能响应(duh?) 除了将数据库日志记录推到一个单独的线程之外,还有其他关于性能的建议吗?有人可以帮助我吗?在操作发生时将操作记录到日志文件的尾部。这有两个好处。它速度非常快,因此您的UI仍然具有响应性,这意味着如果应用程序崩溃,操作不

我目前有一个场景,其中1000个动作可能在几秒钟内发生,我需要将所有这些动作存储在数据库中

我目前所做的是保留一个空闲计时器,一旦这个计时器达到预定义的时间,我将执行缓存的操作(自上次提交以来的操作-这只是一个简单的列表)并将这些操作提交到数据库

用户界面需要尽可能响应(duh?)


除了将数据库日志记录推到一个单独的线程之外,还有其他关于性能的建议吗?有人可以帮助我吗?

在操作发生时将操作记录到日志文件的尾部。这有两个好处。它速度非常快,因此您的UI仍然具有响应性,这意味着如果应用程序崩溃,操作不会丢失

然后有一个后台线程来执行文件中的操作并更新数据库。应用程序崩溃后,可以重新启动,后台线程只需使用过去安全保存的操作进行更新。您甚至可以有一个单独的应用程序/进程/windows服务来进行后台更新,并且让UI应用程序只执行日志写入


如果您确实必须避免使用单独的线程,那么您需要以非常小的批处理方式执行数据库UDPATE,以便尽可能快地执行数据库UDPATE,并以空闲时间进行处理。但是这种方法总是比较差,因为数据库操作与用户界面是同步的。因此,您的UI将在整个过程中挂起。任何数据库问题,例如由于连接问题导致的超时,都会导致用户界面失效。

尝试使用第三方日志框架,如具有异步日志包装的框架。

“100到1000秒的操作可能在几秒钟内发生”-这并不多!我完全支持独立线程和并发安全队列的想法。简单。清洁的(如果可以的话,writer线程可以批处理出队列,但如果不能批处理,则可以亲吻。)