我有一个控制工厂生产线的软件。沿线有一些条形码阅读器。当软件收到条形码时,它必须调用Progress数据库中的过程。有时,通话需要1-2秒,因此它被封装在后台工作中。
由于一个未知的原因,经过几个小时的运行,动态创建BGW需要很多时间。可以在5秒到9分钟之间!!!!
以下是BGW创建的代码:
Dim oParams() As Object = {aParam, opCode, Barcode}
Dim bckInsert As New System.ComponentModel.BackgroundWorker
AddHandler bckInsert.DoWork, AddressOf bckInsert_DoWork
MyBase.Add("Création background pour " & Barcode)
bckInsert.RunWorkerAsync(oParams)
MyBase.Add
调用函数将信息记录到ASCII文件中。
以下是DoWork
处理程序的代码:
Private Sub bckInsert_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
Dim oParams() As Object = e.Argument
Try
Dim aParam = CType(oParams(0), Progress.Open4GL.Proxy.ParamArray)
Dim opCode As String = oParams(1).ToString
Dim Barcode As String = oParams(2).ToString
MyBase.Add("Début DoWork: " & Barcode & " Op: " & opCode)
通常,日志行应该在文件中是连续的。
现在,这是一个日志文件的例子:
11:00:04:243 - Création background pour 1580570 001000 11:00:04:243 - Début DoWork: 1580570 001000 Op: 130
同一时间。
现在,当创作需要很长时间时:
11:00:37:049 - Création background pour 1580578 001000 11:00:42:977 - Début DoWork: 1580578 001000 Op: 130
延迟5秒!!!
11:01:30:121 - Création background pour L5315273 001000 11:10:47:884 - Début DoWork: L5315273 001000 Op: 240
9分钟!!!!!!!!!
CPU介于1%和9%之间,并且仍然有很多可用内存。
任何人都知道如何发生这种情况?