Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 更好的按需功能编程设计_.net_Vb.net_Sql Server 2005_Universe - Fatal编程技术网

.net 更好的按需功能编程设计

.net 更好的按需功能编程设计,.net,vb.net,sql-server-2005,universe,.net,Vb.net,Sql Server 2005,Universe,现在,我有一个这样的程序。旧的遗留系统将一行放入数据库。该行的状态为0。我在.Net中有一个Windows控制台应用程序,它每5秒钟检查一次数据库,并向打印机发送打印命令 这种架构实际上占用了运行控制台应用程序的计算机上的大量资源。本质上,有大量的空命令可以运行。每隔一段时间才会有一个打印命令放入数据库。但是,只要DB获得打印命令,程序就需要尽快处理它 关于如何使这项工作做得更好,有什么建议吗?我认为按需操作可能更好——即传统系统直接向我的程序发送某种信号。我不知道如何做到这一点 任何帮助都会很

现在,我有一个这样的程序。旧的遗留系统将一行放入数据库。该行的状态为0。我在.Net中有一个Windows控制台应用程序,它每5秒钟检查一次数据库,并向打印机发送打印命令

这种架构实际上占用了运行控制台应用程序的计算机上的大量资源。本质上,有大量的空命令可以运行。每隔一段时间才会有一个打印命令放入数据库。但是,只要DB获得打印命令,程序就需要尽快处理它

关于如何使这项工作做得更好,有什么建议吗?我认为按需操作可能更好——即传统系统直接向我的程序发送某种信号。我不知道如何做到这一点

任何帮助都会很棒。

使用消息队列

通过MSMQ(?)将通知从SQL推送到应用程序。从触发器或存储过程(如果适用)创建并发送消息。消息可以像字符串一样简单

轻量级,对性能的伤害更小,然后直接与应用程序通信。 还可以从应用程序中删除轮询更改的需要

下一个改进可能是将控制台应用程序改为作为服务运行,这样它就不需要UI,并且可以预期(在一定范围内)始终运行

进一步的改进可能是拆分控制台应用程序(或服务),并将性能较高的部分分发到不同机箱上的专用实例。只需从SQL实例中透明地重新路由这些任务的消息


无需更改传统应用程序,它允许逐渐发展出耦合性更差的可扩展解决方案。

这是什么样的数据库?SQL Server有一些选项,不知道其他选项;如果可能的话,您可以将处理移动到数据库,并让一个插入触发器运行打印过程。这并不完全有效,但每5秒检查一次记录会消耗大量资源,这似乎令人惊讶。你确定“咀嚼”不会发生在其他地方吗?你可以使用桌面上的触发器启动控制台应用程序。你们能详细解释一下触发器的功能吗?我从来没用过。是的,这是SQLServer2005安装。我还在想,如果遗留系统能够以某种方式向程序发送一个信号,那会有所帮助。然后程序就停在那里,处于休眠状态,直到收到信号,然后唤醒并处理命令。这有意义吗?好吧,我对通知做了一些研究。我想我不知道怎么做,我很困惑。我读了很多科技网的文章,但我还是很困惑。那么SQL server会向我的程序发送通知吗?这听起来正是我所需要的,但我不确定我必须对我的SQL server做些什么才能让它开始发送通知。我能用某种触发器来完成吗?SQL server发送消息就像发送电子邮件一样,它知道地址,但对读卡器一无所知。读取器(您的程序)获取消息,并可以根据消息对其执行一些有用的操作。看看更新后的答案,上面有一个关于如何做itiboshuizen的链接——我对此做了一些研究,但在实现方面仍然有问题。是否有关于在某处实现此功能的演练?我在编程端使用VisualStudio2010,使用SQLServer2005作为服务器。