今年早些时候,我的一个同事在开发环境上遇到了一个问题,我已经调查了这个问题,并找出了问题所在。他的机器和我的机器唯一的主要区别是我没有运行windows更新。从那时起,我的电脑强制更新,现在这个问题发生在我的电脑上。
我们都运行的是Windows10Pro,IIS10.0.17132.1。
问题所在。在传统的asp中,当为class字段赋值或从字段中读取值时,现在花费的时间比预期的要长得多。
使用public或private (带有getters / setters)对速度没有影响。
我已经在我们的一台服务器上测试了这个问题,它没有受到这个问题的影响。它的性能与我之前的机器非常相似。
我已经在下面包含了我的测试脚本。这是我们看到的测试结果。
服务器计时。计数: 100000,分配时间: 0.359375,测试时间: 0.222656,其他时间: 0.527344,总时间: 1.109375,错误:0。
本地计时。计数: 100000,分配时间: 14.07813,测试时间: 13.73438,其他时间: 0.460938,总时间: 28.27344,错误:0。
<%
dim t, startTime, totalTime, assignTime, testTime, otherTime, n, max, classArray(), data, testVal, errors
class mytest
public myval
end class
startTime = timer
assignTime = 0
testTime = 0
max = 100000
if isEmpty(request("max")) = false and isNumeric(request("max")) = true then max = cLng(request("max"))
if max < 1 then max = 1
errors = 0
redim classArray(max)
for n = 1 to max
set data = new mytest
t = timer
data.myval = "test_" & n
assignTime = assignTime + (timer - t)
set classArray(n) = data
next
for n = 1 to max
set data = classArray(n)
t = timer
testVal = data.myval
testTime = testTime + (timer - t)
if testVal <> "test_" & n then
errors = errors + 1
end if
next
totalTime = (timer - startTime)
otherTime = totalTime - assignTime - testTime
response.write "Count: " & max & ", "
response.write "Assign time: " & round(assignTime, 6) & ", "
response.write "Test time: " & round(testTime, 6) & ", "
response.write "Other time: " & round(otherTime, 6) & ", "
response.write "Total time: " & round(totalTime, 6) & ", "
response.write "Errors: " & errors & "."
%>从调查中,我还发现问题似乎是对类的调用,而不是数据在类中的应用。
将我的类调整为具有两个字段,并创建一个同时设置这两个字段的函数(或者将这两个字段作为一个数组读出)。手动设置这两个参数所需的时间是调用一个函数来设置这两个参数所需时间的两倍。读回数据也有同样的效果。
<%
class mytest
public myval
public myval2
public function setdata(v1, v2)
myval = v1
myval2 = v2
end function
public function getdata()
getdata = array(myval, myval2)
end function
end class
set data = new mytest
data.myval = "test"
data.myval2 = "test2"
set data = new mytest
call data.setdata("test", "test2")
%>我花了几个小时在网上搜索与此相关的任何东西,但什么也找不到。
所以,
还有没有人看过这个问题?
它会影响其他人的开发环境吗?
有没有人有办法解决这个问题?
发布于 2018-08-31 16:47:55
谢谢@erik
我想给你加票,但你的评论旁边似乎没有我的向上箭头。但还是要谢谢你。
是的,服务器上的vbscript.dll版本不同。我已经在我的开发环境和同事的机器上替换了这些DLL,这个问题已经解决了。我们正在监控日志,看看使用servers DLL是否有任何负面影响,但到目前为止一切看起来都很好。
在我可以替换它们之前,我必须从TrustedInstaller那里获得动态链接库的所有权,但在那之后一切都很顺利,不确定我必须这样做,但在我完成后,我把所有权还给了TrustedInstaller。
服务器和我们的开发机器都是windows更新的,所以我假设DLL的差异是平台特定的,或者可能是Windows 10中他们想要解决的问题,而不是在更新时放入他们推送到服务器的版本中。
详细信息。
system32\vbscript.dll
Windows 10 DLL 25/07/2018 17:31 (版本5.812.10240.16384)
Windows server 2012R2 DLL 19/07/2018 05:33 (版本5.8.9600.19101)
syswow64\vbscript.dll
与system32的日期和版本相同(文件大小不同,但这是意料之中的)。
https://stackoverflow.com/questions/52054208
复制相似问题