I have a large model that I am using VB.NET to extract the end forces for a reporting program we have. Using the code below it currently takes about 60.6 hours to get the start and end forces for each load case and combination load. Is there a better way? the old VB6 method seemed faster. It works, just seems really slow. About 2 seconds per member.
For i = 1 To pnMemberCount
Dim diff AsLong
diff = DateDiff(DateInterval.Second, startTime, Now())
eta = (((diff / i) * pnMemberCount) - diff) / 60.0
If eta > 60.0 Then
frmStatus.lblStatus.Text = "Processing member "& i & " of "& pnMemberCount & " approx "& (eta / 60.0).ToString("0.000") & " hours"
ElseIf eta < 1.0 Then
frmStatus.lblStatus.Text = "Processing member "& i & " of "& pnMemberCount
Else
frmStatus.lblStatus.Text = "Processing member "& i & " of "& pnMemberCount & " approx "& eta.ToString("0.00") & " minutes"
EndIf
frmStatus.Refresh()
For j = 1 To pnLoadCaseCount
objOpenSTAAD.Output.GetMemberEndForces(pnMemberNumbers(i - 1), 0, pnLoadCaseNumbers(j - 1), endForces)
LoadEndForce.memberNumber = pnMemberNumbers(i - 1)
LoadEndForce.loadNumber = pnLoadCaseNumbers(j - 1)
LoadEndForce.startForce = endForces(0)
bjOpenSTAAD.Output.GetMemberEndForces(pnMemberNumbers(i - 1), 1, pnLoadCaseNumbers(j - 1), endForces)
LoadEndForce.endForce = endForces(0)
textStream.WriteLine(LoadEndForce.memberNumber.ToString() & ","& LoadEndForce.loadNumber.ToString() & ","& _
LoadEndForce.startForce.ToString("0.00") & ","& LoadEndForce.endForce.ToString("0.00"))
Next
For j = 1 To pnLoadCombinationCount
objOpenSTAAD.Output.GetMemberEndForces(pnMemberNumbers(i - 1), 0, pnLoadCombinationNumbers(j - 1), endForces)
LoadEndForce.memberNumber = pnMemberNumbers(i - 1)
LoadEndForce.loadNumber = pnLoadCombinationNumbers(j - 1)
LoadEndForce.startForce = endForces(0)
objOpenSTAAD.Output.GetMemberEndForces(pnMemberNumbers(i - 1), 1, pnLoadCombinationNumbers(j - 1), endForces)
LoadEndForce.endForce = endForces(0)
textStream.WriteLine(LoadEndForce.memberNumber.ToString() & ","& LoadEndForce.loadNumber.ToString() & ","& _
LoadEndForce.startForce.ToString("0.00") & ","& LoadEndForce.endForce.ToString("0.00"))
Next
frmStatus.ProgressBar1.PerformStep()
frmStatus.lbl_percent.Text = Math.Floor((frmStatus.ProgressBar1.Value / frmStatus.ProgressBar1.Maximum) * 100).ToString() & "%"
frmStatus.Refresh()