对数组的Lcase操作耗时太长

时间:2012-01-31 20:01:34

标签: arrays performance vbscript asp-classic

我正在使用一个脚本,该脚本旨在通过GetRows将表单返回的值与转储到数组的数据库中的值进行比较。检查的目的是将表单值与数据库值进行比较,并仅更新数据库中匹配的ID行。 我已经在表单中看到了隐藏变量,但由于我们在任何给定时间都有很多用户在线,因此当用户填写表单时,db端的值可能会发生变化。

目前,代码使用内部和外部循环来运行此比较,并为临时变量分配上述数组中的当前col /行。对该值执行lcase和trim操作以获取临时变量 这导致了相当大的性能消耗,我想知道是否可以在创建该数组期间执行lcase / trim功能,而不是在循环情况下执行? 这是我的代码: **注意:这利用FastString类进行连接,因此“FastString”和“.Append”

dim iRowLoop, iColLoop, zRowLoop, strChange, tempDbValsCase
Set strChange = New FastString
for iRowLoop = 0 to ubound(arrDbVals, 2)

    for zRowLoop = 0 to ubound(arrFormComplete)

        ''#****below line is what is causing the bottleneck, according 
        ''#****to a timer test
        tempDbValsCase = lcase(trim(arrDbVals(1, iRowLoop)))
       ''#****

        if (mid(trim(arrFormComplete(zRowLoop)),1,8) = trim(arrDbVals(0, iRowLoop))) AND (mid(trim(arrFormComplete(zRowLoop)),9) <> tempDbValsCase) then

            dim strFormAllVals
            strFormAllVals = arrFormComplete(zRowLoop)
            strChange.Append strFormAllVals & ","

        end if

    next

next

在数据库端(MS SQL Server 2008),通过GetRows派生数组的表包含位数据类型列“完成”。 lcase和trim操作在阵列的此列上执行。 bit数据类型是否在输出中添加任何隐藏字符?在视觉上,我没有检测到任何,但是当我将表单输入中的“True”值与看起来像“True”的数组中的值进行比较时,它不匹配,直到我运行lcase并修剪“完整”栏目。

1 个答案:

答案 0 :(得分:1)

尝试

dim iRowLoop, iColLoop, zRowLoop, strChange, tempDbValsCase
dim iCount1, iCount2, match

Set strChange = New FastString

iCount1 = ubound(arrDbVals, 2)
iCount2 = ubound(arrFormComplete)

for iRowLoop = 0 to iCount1

    for zRowLoop = 0 to iCount2

        ' Assign array lookup to a variable '
        tempDbValsCase = arrDbVals(1, iRowLoop)

        ' ...and then perform operations on it one at a time '
        tempDbValsCase = trim(tempDbValsCase)
        tempDbValsCase = lcase(tempDbValsCase)

        ' Assign this array lookup to a variable and perform trim on it '
        match = trim(arrFormComplete(zRowLoop))

        if (mid(match,1,8) = trim(arrDbVals(0, iRowLoop))) AND (mid(match,9) <> tempDbValsCase) then

            strChange.Append match & ","

        end if

    next

next