2014-05-10 3 views
1

Eh bien, j'essaie de convertir divers "octets" de données à "long". Et il semble être très lent ...Traitement lent

code:

For X = 0 To Map.MaxX 
     For Y = 0 To Map.MaxY 
      Map.Tile(X, Y).Data1 = Buffer.ReadLong 
      Map.Tile(X, Y).Data2 = Buffer.ReadLong 
      Map.Tile(X, Y).Data3 = Buffer.ReadLong 
      Map.Tile(X, Y).DirBlock = Buffer.ReadLong 
      ReDim Map.Tile(X, Y).Layer(0 To MapLayer.Layer_Count - 1) 
      For i = 0 To MapLayer.Layer_Count - 1 
       Map.Tile(X, Y).Layer(i).tileset = Buffer.ReadLong 
       Map.Tile(X, Y).Layer(i).X = Buffer.ReadLong 
       Map.Tile(X, Y).Layer(i).Y = Buffer.ReadLong 
      Next 
      Map.Tile(X, Y).Type = Buffer.ReadLong 
     Next 
    Next 

Converter:

Public Function ReadLong(Optional ByVal peek As Boolean = True) As Long 
    If Buff.Count > readpos Then 'check to see if this passes the byte count 
     Dim ret As Long = BitConverter.ToInt64(Buff.ToArray, readpos) 
     If peek And Buff.Count > readpos Then 
      readpos += 8 
     End If 
     Return ret 
    Else 
     Throw New Exception("Byte Buffer Past Limit!") 'past byte count throw a new exception 
    End If 
End Function 

Quelqu'un a des conseils ou une solution?

+2

Qu'est-ce qui vous fait penser que c'est lent? – Enigmativity

Répondre

0

Un problème que je peux voir est que vous appelez buff.ToArray chaque fois que vous lisez une valeur longue. La méthode ToArray fera une copie du tampon à chaque fois. Vous devez appeler ToArray avant de commencer le traitement de la carte et utiliser l'instance de tableau lors de l'appel de la méthode BitConverter.ToInt64.