2009-02-10 8 views
1

Je souhaite définir un tableau.dim Array

Ma question est Dim x (999) ou Dim x (9999) coûteront les mêmes x ou Dim (9999) gaspille plus de ressources?

Merci beaucoup !!

Répondre

2

Naturellement créer un tableau avec 9999 éléments dans celui-ci utilisera plus de mémoire que d'un tableau avec seulement 999. Je soupçonne que ce n'est pas vraiment votre question cependant. Peut-être que vous essayez de trouver un moyen d'allouer suffisamment de mémoire pour une quantité dynamique de données? Vous pouvez redimensionner des tableaux dans ASP (VBScript) classique en utilisant l'instruction ReDim - vous pouvez le faire une fois que la taille réelle est connue.

1

Les tableaux sont alloués dans la mémoire contiguë. Ainsi, un tableau de 10000 éléments occupera 10 fois la mémoire de celui qui a besoin de 1000 éléments.

Vous pouvez commencer petit et agrandir votre tableau en cas de besoin. J'ai utilisé ce type de classe dans le passé pour créer un type de liste de longueur variable.

Class List 
    Dim maItems 
    Dim mlCount 

    Public Sub Class_Initialize() 
     ReDim maItems(8) 
     mlCount = 0 
    End Sub 

    Public Function Add(Item) 
     If mlCount = UBound(maItems) ReDim Preserve maItems(mlCount * 2) 
     mlCount = mlCount + 1 
     maItems(mlCount) = Item 
     Add = mlCount 
    End Function 

    Public Property Get Item(Index) 
     If Index < 1 Or Index > mlCount Then Error.Raise 9, "List", "Subscript out of Range" 
     Item = maItems(Index) 
    End Property 

    Public Property Get Count() 
     Count = mlCount 
    End Property 
End Class  
+1

Je pense que le code ci-dessus devrait plutôt être: Dim Dim maItems mlCount Sous Class_Initialize publique() ReDim maItems (8) mlCount = 0 End Sub – PropellerHead

+1

@PropellerHead: Bien vu. Je passe la majeure partie de mon temps en C# ces jours-ci. ;) – AnthonyWJones

0

Est-ce que c'est un gros tableau? Pourquoi ne pas l'assigner pour être dynamiquement et puis développer comme il se développe?

<% 
Dim myDynArray() 

ReDim myDynArray(1) 
myDynArray(0) = "Albert Einstein" 
myDynArray(1) = "Mother Teresa" 

ReDim Preserve myDynArray(3) 
myDynArray(2) = "Bill Gates" 
myDynArray(3) = "Martin Luther King Jr." 

For Each item In myDynArray 
    Response.Write(item & "<br />") 
Next 
%> 

sortie du code ci-dessus est

Albert Einstein Mother Teresa Bill Gates Martin Luther King Jr. 
+0

Vous devez faire attention à ne pas étendre trop souvent le tableau, la préservation nécessite souvent que le tableau dans son ensemble soit copié en mémoire. – AnthonyWJones

+0

Je suis d'accord, mais était seulement pour l'exemple de l'amour. – balexandre

0

J'ai ajouté un peu au code de Anthony W Jones, il retourne un tableau (ToArray()) avec la taille correcte avec seulement les éléments pertinents.

Class List  
    Dim maItems  
    Dim mlCount 

    Public Sub Class_Initialize()  
     ReDim maItems(8) 
     mlCount = 0  
    End Sub  

    Public Function Add(Item)    
     If mlCount = UBound(maItems) Then ReDim Preserve maItems(mlCount * 2)  
     maItems(mlCount) = Item 
     mlCount = mlCount + 1 
     Add = mlCount 
    End Function 

    Public Property Get ToArray() 

     ReDim Result(Params.Count-1) 

     Dim i 
     For i = 0 to Params.Count-1 
      Result(i) = Params.maItems(i) 
     Next 

     ToArray = Result   
    End Property 

    Public Property Get Item(Index)  
     If Index < 1 Or Index > mlCount Then Error.Raise 9, "List", "Subscript out of Range"  
     Item = maItems(Index) 
    End Property 

    Public Property Get Count()  
     Count = mlCount 
    End Property 
End Class