昏暗的ASP阵列

时间:2009-02-10 09:06:07

标签: arrays vbscript

我想定义一个数组。

我的问题是 Dim x(999) Dim x(9999)会花费相同还是Dim x(9999)会浪费更多资源?

非常感谢!!

4 个答案:

答案 0 :(得分:2)

自然地创建一个包含9999个元素的数组将使用比只有999的数组更多的内存。我怀疑这不是你的问题。也许你正在试图找到一种为动态数据量分配足够内存的方法?您可以使用ReDim语句在经典ASP(VBScript)中调整数组大小 - 一旦知道了真实大小,就可以执行此操作。

答案 1 :(得分:1)

数组在连续内存中分配。因此,10000个元素的数组将占用需要1000个元素的数组的10倍的内存。

您可以从小处着手,在需要时增加阵列。我过去曾使用过这种类创建可变长度列表类型。

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    

答案 2 :(得分:0)

阵列那么大吗?

为什么不将它分配为动态,然后随着它的增长而扩展?

<%
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
%>

上面代码的输出是

Albert Einstein Mother Teresa Bill Gates Martin Luther King Jr. 

答案 3 :(得分:0)

我在Anthony W Jones的代码中加了一点,所以它返回一个只有相关元素的正确大小的数组(ToArray())。

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