2016-07-29 89 views
1

我正在编写一个应用程序,它有一个SslStream/NetworkStream/TcpClient以及多个SqlConnection实例。我不断地发送和接收数据,但由于这是一个可以在本地和远程访问多个服务器的应用程序,因此我需要监视连接以查找失败,并在失败时尝试重新启动它们。是否有一个Microsoft支持的约定,我应该如何监视这些类?该文件没有真正显示任何东西。我试过CanRead/CanWriteSslStream,我当然有能力监视超时。有没有推荐的时间来计时?监视/计数超时是监视连接丢失的唯一方法吗?C#:监控连接

回答

2

托管SqlConnection实例应该是短暂的。只有在需要时才创建它们,然后将它们处理掉。不要让它们随时随地在你的应用程序中随时待命,这是非常糟糕的做法。原因是Sql Server(以及其他数据库)实现连接池,所以创建托管连接相对便宜,因为底层连接一旦释放回池就会被重用。

+0

这是非常有帮助的。唯一的问题是,这个应用程序将从远程服务接收不断的数据包数据流,对它们进行格式化,并将它们放入多个SQL数据库中。这是如何按照惯例处理的?如果我为我打算插入的每一条线打开一个新的连接,是不是会得到非常大的连接?我是否应该在不同的线程上执行每个插入操作,以便在任何特定时间都可以连接大量连接? – Rob

+1

@Rob - 你可以设置一个队列(在.net中有多个队列提供程序)并对其进行结构化,以便将传入的数据推送到一个队列,然后通过将数据推送到队列中来清空队列中的每个XXX(某个时间帧)数据库。在每次从队列读取数据并写入DB的执行中,在该时间段内创建一个新的SqlConnection,然后在迭代完成时将其丢弃。 – Igor

+0

我没有考虑过,这很有趣,因为我的程序中已经有很多其他队列了。对于多久处理一个队列,是否有一个好的软件经验法则? – Rob