ThinkGeo.com    |     Documentation    |     Premium Support

Drawing Lines using InMemoryFeatureLayer very slow

I am drawing up to 500 lines at a maximum rate of 20 lines per second. I found that the map display is getting slower when the updates is that fast.


Any suggestions on how to solve this performance issue ?


Attaced is my code.


Public Sub Draw_Line(ByVal Ref, ByVal LongBeg, ByVal LatBeg, ByVal LongEnd, ByVal LatEnd, ByVal Layer, ByVal Label, ByVal Colour, ByVal LineType, ByVal Linewidth)


        Dim sysColour As System.Drawing.Color = System.Drawing.ColorTranslator.FromOle(Colour)

        Dim geoColour As GeoColor = GeoColor.FromArgb(sysColour.A, sysColour.R, sysColour.G, sysColour.B)


        Dim valueStyle As New ValueStyle()

        valueStyle.ColumnName = "Line"


        Dim valueItem As New ValueItem()

        valueItem.DefaultAreaStyle.OutlinePen.Color = geoColour

        valueItem.DefaultLineStyle.OuterPen.Color = geoColour

        valueItem.DefaultLineStyle.OuterPen.Width = Linewidth

        valueItem.Value = CStr(Ref)

        valueStyle.ValueItems.Add(valueItem)


        Dim inMemoryLayer As InMemoryFeatureLayer = CType(WinformsMap1.FindFeatureLayer(Get_Layer(Layer)), InMemoryFeatureLayer)


        inMemoryLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(valueStyle)

        inMemoryLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20

        inMemoryLayer.Open()

        inMemoryLayer.Columns.Add(New FeatureSourceColumn("Line"))

        inMemoryLayer.Close()


        Dim lineShape As New LineShape()

        lineShape.Vertices.Add(New Vertex(LongBeg, LatBeg))

        lineShape.Vertices.Add(New Vertex(LongEnd, LatEnd))

        lineShape.Id = CStr(Ref)


        Dim newFeature As Feature = New Feature(lineShape)

        newFeature.ColumnValues.Add("Line", CStr(Ref))

        inMemoryLayer.InternalFeatures.Add(newFeature)


        WinformsMap1.Refresh(WinformsMap1.Overlays())


    End Sub



Dana, 
  
   By looking at your code, I think that the inefficiency might come from the fact that you are refreshing the map each time you are calling the function Draw_Line. If you are calling that function 20 times in a second and you are refreshing the map each time, this is going to cause a performance issue. It would make more sense to call WinformsMap1.Refresh() only one time, once you have added all the new features to your inMemorFeatureLayer. I hope this tip is going to help.

Hi Val, 
  
 Thanks for the feedback. I agree with your observation.  The implementation of an external refresh timer to "bulk" refresh newly drawn lines should work.  I kind of hoped that there is an "auto-refresh" mechanism for such scenarios. 
  
 Dana

Dana,


 I am glad I could point you to the right direction. We don't have an "auto-refresh" mechanism because we can never assume at what point some changes should be reflected on the map. Thank you.