为什么安装的程序版本与调试模式下的版本不同?

时间:2018-02-26 18:26:41

标签: c++ visual-studio visual-c++ time

我创建了一个程序,它将一堆文本发送到速度为9600的COM端口。在调试模式下,程序发送所有数据,而不是COM端口关闭。如果我创建一个安装程序项目,而不是将它安装在同一台机器上,它就不会发送最后一个符号。它比所有数据传输更早地关闭端口。所以我的问题是:调试exe文件是否较慢或是否因为IDE(Visual Studio)而减速?

在最后一个转换命令和端口关闭行之间添加val query = for { r <- coffees } yield (r.name, r.supID, r.price, r.sales, r.total) val future = for { _ <- db.run(setup) r <- db.run(query.result) } yield r val rows = Await.result(future, Duration.Inf) rows.foreach{ row => println(row) } ,问题就消失了。

1 个答案:

答案 0 :(得分:4)

您的观察结果与错误编写的程序相对应,显示目前只能通过发布版本检测到的错误迹象。

发布版本往往运行得更快,因为它们是在增强的优化级别创建的,并且关闭了各种调试实用程序。它们旨在以开发时可调试性为代价实现最高生产性能。创建安装包显然创建了一个发布版本(这很有意义)。

这种性能的提高反过来会影响程序的时间安排。如果您在端口关闭之前意外地依赖于持续时间很长的时间,让您的程序有足够的时间只是偶然传输其所有数据,那么当此过程加速时,您的错误就会变得可观察到。数据没有足够的时间通过。添加Sleep模拟调试版本的执行速度较慢,因此几乎可以肯定地确认存在时序错误。

这是个好消息!您有充分的证据证明错误的位置和形式。现在你所要做的就是解决它!