如何有效地将100到1000个操作记录到数据库

时间:2011-01-08 07:01:25

标签: c# database performance fluent-nhibernate

我目前有一个场景,可以在几秒钟内完成1000次操作,我需要将所有这些操作存储在数据库中。

我目前所做的是保留一个空闲计时器,一旦这个计时器到达预定义的时间,我就采取缓存的操作(自上次提交后的操作 - 这只是一个简单的列表)并将这些操作提交给数据库。 / p>

UI需要尽可能快地响应(呃?)。

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

2 个答案:

答案 0 :(得分:4)

尝试使用具有异步日志记录包装器的NLog等第三方日志记录框架。

答案 1 :(得分:2)

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

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

如果你真的必须避免单独的线程,那么你需要以非常小的批量执行数据库udpates,因此它们尽可能快,并且在空闲时间处理。但是这种方法总是比较差,因为数据库操作与UI同步。因此,您的UI会持续一段时间。任何数据库问题(例如因连接问题导致的超时)都会导致UI死亡。