首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP-Classic -为类中的字段赋值非常慢,因为今年最近的一个窗口更新

ASP-Classic -为类中的字段赋值非常慢,因为今年最近的一个窗口更新
EN

Stack Overflow用户
提问于 2018-08-28 17:13:47
回答 1查看 111关注 0票数 1

今年早些时候,我的一个同事在开发环境上遇到了一个问题,我已经调查了这个问题,并找出了问题所在。他的机器和我的机器唯一的主要区别是我没有运行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。

代码语言:javascript
复制
<%

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 & "."

%>

从调查中,我还发现问题似乎是对类的调用,而不是数据在类中的应用。

将我的类调整为具有两个字段,并创建一个同时设置这两个字段的函数(或者将这两个字段作为一个数组读出)。手动设置这两个参数所需的时间是调用一个函数来设置这两个参数所需时间的两倍。读回数据也有同样的效果。

代码语言:javascript
复制
<%
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")
%>

我花了几个小时在网上搜索与此相关的任何东西,但什么也找不到。

所以,

还有没有人看过这个问题?

它会影响其他人的开发环境吗?

有没有人有办法解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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的日期和版本相同(文件大小不同,但这是意料之中的)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52054208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档