我创建了一个程序,它将一堆文本发送到速度为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)
}
,问题就消失了。
答案 0 :(得分:4)
您的观察结果与错误编写的程序相对应,显示目前只能通过发布版本检测到的错误迹象。
发布版本往往运行得更快,因为它们是在增强的优化级别创建的,并且关闭了各种调试实用程序。它们旨在以开发时可调试性为代价实现最高生产性能。创建安装包显然创建了一个发布版本(这很有意义)。
这种性能的提高反过来会影响程序的时间安排。如果您在端口关闭之前意外地依赖于持续时间很长的时间,让您的程序有足够的时间只是偶然传输其所有数据,那么当此过程加速时,您的错误就会变得可观察到。数据没有足够的时间通过。添加Sleep
模拟调试版本的执行速度较慢,因此几乎可以肯定地确认存在时序错误。
这是个好消息!您有充分的证据证明错误的位置和形式。现在你所要做的就是解决它!