hexagon logo

CMM Automation Speed C# versus VB6

Hi,

I am currently converting an application that automated PC-DMIS in VB6 over to C#. Our application does the following:


1) Ask the user what PC-DMIS program (i.e. a PRG file) they want to run
2) Launch PC-DMIS passing in the name of the program file selected
3) Get PC-DMIS to run a series of measurements on a Scirocco machine
4) Import the measurements from PC-DMIS into the application for processing
5) Process the results (basically we compare the measurements to a baseline, then insert the deviation into a database)

What I observed is that for any program (we've tried quite a few and this seems to be consistently happening), the VB6 application takes approximately 30 seconds to perform step 4, whereas the C# application takes around 2.5 minutes.

Can anyone help with the following questions please?

1) We directly ported the code from the legacy VB6 application to C# so the new program isn't doing anything different from what the old VB6 one used to do, so why does C# take so much longer than VB6 to perform the import?
2) Is there any way to speed it up, e.g. I think I read something on a forum that VB.NET may be faster, but I can't find anything technical from Microsoft to support that so I can't really justify burning a lot of hours to convert from C# to VB.NET in case it is the same speed?

Thanks!
Parents
  • The big difference lies in

    For Each PcCmd In PcCmds


    vs.

    for (int i = 1; i <= PCPart.Commands.Count; i++) 
    {
       var PCCommand = PCPart.Commands.Item(i);
    

    Indexing into .Commands seems to be quite a bit slower compared to getting the next one through For Each.... If the modern language doesn't support For Each, I think you can use a while-loop and PCCommand.Next (or something similar) instead.

    The "write to file" part is probably also much slower in .NET than in VB6.


    If memory serves me correctly, C#'s "foreach" extension only works on collections that implement IEnumerable, so I don't think it will work on PCDLRN.Commands without first casting into something else.
Reply
  • The big difference lies in

    For Each PcCmd In PcCmds


    vs.

    for (int i = 1; i <= PCPart.Commands.Count; i++) 
    {
       var PCCommand = PCPart.Commands.Item(i);
    

    Indexing into .Commands seems to be quite a bit slower compared to getting the next one through For Each.... If the modern language doesn't support For Each, I think you can use a while-loop and PCCommand.Next (or something similar) instead.

    The "write to file" part is probably also much slower in .NET than in VB6.


    If memory serves me correctly, C#'s "foreach" extension only works on collections that implement IEnumerable, so I don't think it will work on PCDLRN.Commands without first casting into something else.
Children
No Data