hexagon logo

Why is writing to PC-DMIS from VBA so slow?

I have two scripts that do very similar things : Read scan point data from PC-DMIS and then write scan point data back into PC-DMIS. One version of the script is written and executed in PC-DMIS basic. The other is written in Excel VBA and is executed through Excel by calling the macro from a very simple PC-DMIS script.

The PC-DMIS only version writes the scan data out to a temp file and then reads it back out of the file and writes to PC-DMIS. The excel version reads the data out into memory in a 2D array and then writes it back into PC-DMIS from the array, no external files involved.

I figured the Excel version would be faster since everything is in memory. It turns out that it is wicked slow and takes about 11 seconds to write a 64 point scan while the PC-DMIS version does it in less than 1 second. All the time is in the writing via the Puttext method. Reading from PC-DMIS into the array takes a fraction of a second but writing it back out into PC-DMIS takes 11 seconds. In the PC-DMIS only version both operations take a fraction of a second.

Is VBA just inherently slow for this kind of thing? Anyone else experienced this?
Parents
  • Any time I am reading from PCDMIS with an external app I just grab the edit window text and parse line by line. It's wicked fast, as long as the text has the info you need. I can process 6000 lines even before the form shows. I'm going to try Application.Visible for writing TO PCDMIS though!!

    Dim progText As String = Pcdapp.ActivePartProgram.EditWindowTextAll
    Dim prgLines() As String = Split(progText, Chr(10))
    For t As Integer = 0 To prgLines.Length - 1
    'parse lines here, for example:
    If prgLines(t).Contains("THEO/") Then
    'process text here
    End If
    Next
Reply
  • Any time I am reading from PCDMIS with an external app I just grab the edit window text and parse line by line. It's wicked fast, as long as the text has the info you need. I can process 6000 lines even before the form shows. I'm going to try Application.Visible for writing TO PCDMIS though!!

    Dim progText As String = Pcdapp.ActivePartProgram.EditWindowTextAll
    Dim prgLines() As String = Split(progText, Chr(10))
    For t As Integer = 0 To prgLines.Length - 1
    'parse lines here, for example:
    If prgLines(t).Contains("THEO/") Then
    'process text here
    End If
    Next
Children
No Data