Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 阵列上的Lcase操作花费的时间太长_Arrays_Performance_Vbscript_Asp Classic - Fatal编程技术网

Arrays 阵列上的Lcase操作花费的时间太长

Arrays 阵列上的Lcase操作花费的时间太长,arrays,performance,vbscript,asp-classic,Arrays,Performance,Vbscript,Asp Classic,我正在使用一个脚本,该脚本旨在通过GetRows将表单返回的值与转储到数组的数据库中的值进行比较。检查的目的是将表单值与数据库值进行比较,并仅更新数据库中匹配ID的行。 我见过表单中的隐藏变量可以做到这一点,但由于在任何给定时间都有相当多的用户在线,因此当用户填写表单时,db端的值可能会发生变化 目前,代码使用一个内部和外部循环来运行此比较,并将一个临时变量分配给上述数组中的当前列/行。对该值执行lcase和trim操作以获得临时变量。 这会造成相当大的性能损失,我想知道lcase/trim功能

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

目前,代码使用一个内部和外部循环来运行此比较,并将一个临时变量分配给上述数组中的当前列/行。对该值执行lcase和trim操作以获得临时变量。
这会造成相当大的性能损失,我想知道lcase/trim功能是否可以在创建该阵列时执行,而不是在循环情况下执行? 这是我的密码: **注意:这利用了FastString类进行连接,因此使用了“FastString”和“.Append”

dim iRowLoop、iColoop、zRowLoop、strChange、tempdbValcase
设置strChange=New FastString
对于iRowLoop=0到uBond(arrDbVals,2)
对于zRowLoop=0到uBond(arrFormComplete)
根据研究,第行下方的“”是导致瓶颈的原因
''****到计时器测试
tempdbValcase=lcase(修剪(arrDbVals(1,iRowLoop)))
''#****
如果(mid(trim(arrFormComplete(zRowLoop)),1,8)=trim(arrdbals(0,iRowLoop)))和(mid(trim(arrFormComplete(zRowLoop)),9)tempdbalcase),则
暗标准格式
strFormAllVals=arrFormComplete(zRowLoop)
strChange.Append strFormAllVals&“
如果结束
下一个
下一个
在数据库端(MS SQL Server 2008),通过GetRows从中派生数组的表包含位数据类型列“Complete”。lcase和trim操作在数组的该列上执行。位数据类型是否在输出中添加任何隐藏字符?从视觉上看,我没有检测到任何错误,但是当我将表单输入中的“True”值与数组中看起来像“True”的值进行比较时,它并不匹配,直到我运行lcase并修剪“Complete”列为止。

试试看

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
dim iRowLoop、iColoop、zRowLoop、strChange、tempdbValcase
尺寸图标编号1,图标编号2,匹配
设置strChange=New FastString
iCount1=ubound(arrDbVals,2)
iCount2=ubound(arrFormComplete)
对于iRowLoop=0到iCount1
对于zRowLoop=0到iCount2
'将数组查找分配给变量'
tempdbValcase=arrDbVals(1,iRowLoop)
“…然后一次对其执行一个操作”
tempdbValcase=修剪(tempdbValcase)
tempdbValcase=lcase(tempdbValcase)
'将此数组查找分配给变量并对其执行修剪'
匹配=修剪(arrFormComplete(zRowLoop))
如果(mid(match,1,8)=trim(arrdbals(0,iRowLoop)))和(mid(match,9)tempdbalcase),则
strChange.Append match&“
如果结束
下一个
下一个

您正在使用的数据库是什么?您可以使用
TypeName(yourvariable)
来比较数据库中的数据和表单中的数据是否属于同一类型。谢谢-我使用的是MS SQL Server 2008。我插入了TypeName(var),结果是“布尔”和“字符串”。“Complete”列是布尔值,而表单值是“String”。我转换为CStr,但性能没有任何改善。非常感谢-我尝试使用此代码代替以前的代码,但性能时间仍然相同。是否有一种方法可以在早期阶段将布尔值转换为字符串?除了使用
CStr
CBool
尝试将两个值转换为相同的类型外,您可能需要尝试完全不同的方法。可能类似于处理较小的结果集,然后在第一个结果集完成后异步加载和处理下一个结果集。导致性能下降的最大因素是嵌套的
for
循环。如果你能把两者分开,你会发现脚本的整体速度有很大的提高。谢谢你的好主意!我不确定如何将它们分开,因为它们正在进行比较。我曾考虑过添加另一个db列,在插入新行时,触发器可以将“Complete”列中的值复制到一个新列中-相同的值但不同的数据类型-“nvarchar”。我不喜欢这样做,但是如果数据类型可以在选择过程之前存在(以避免当时的转换),那么它可能会很好。
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