计时器是否适合这个?

时间:2010-06-09 08:30:31

标签: c# .net vb.net tsql

我有使用MSSQL数据库的应用程序。 应用程序具有用于在应用程序用户之间发送消息的模块。 当一个用户向另一个用户发送消息时,在数据库中插入消息,并将消息状态设置为1(在用户读取消息数据库后我更新并将消息状态设置为0)。

现在,我正在使用system.timers.timer来检查消息状态,如果消息状态1用户得到警告他有一个消息收件箱。

问题是这个应用程序可以被许多用户使用,如果计时器运行5分钟,那么应用程序和数据库就会变慢。

有没有其他解决方案可以做到这一点,没有运行计时器?

谢谢!

3 个答案:

答案 0 :(得分:1)

我不认为使用定时器进行轮询的解决方案很糟糕。 50个用户相对较少。

每个用户是否运行直接连接到数据库的客户端应用程序?或者这是一个ASP.NET应用程序?或者连接到数据库并通知客户端应用程序的服务?

如果您的客户端应用程序直接连接到数据库,我会使用计时器并可能减少超时(在您的情况下,查询的数量似乎非常低)。

其他选项

  1. 使用SqlDependency / Query通知MSDN
  2. 只有当您的消息处理逻辑变得更复杂时,才可以查看服务代理。特别是如果你需要排队行为。但是看起来,这太复杂了。
  3. 我不会使用触发器。

答案 1 :(得分:0)

也许您应该考虑使用“监视”服务,这是唯一一个查看数据库中的更改然后向其他应用程序(代理人)发送数据已更新的消息,并且他们自己应该获取他们的只有在获得该消息时才拥有数据。

答案 2 :(得分:0)

如果始终针对消息表进行检查,则可以使用向名为HasNewMessage的用户表添加一列,该列由消息表上的触发器更新

说明一下:

用户1收到新消息 Messagetable触发器将hasNewMessage设置为1,用于user1

然后,如果user1 HasNewMessage,则每5分钟检查一次(由于索引用户应该更快) 表)

如果user1查看了他的邮箱,则将HasNewMessages设置为0

希望这有帮助