В начале этого года у нас была проблема с одним из моих коллег-разработчиков, я исследовал проблему и выяснил ее. Единственное главное отличие его и моих машин в том, что я не запускал обновления Windows. С тех пор мой компьютер принудительно установил обновления, и теперь проблема возникает на моей машине.
Мы оба работаем под управлением Windows 10 Pro, IIS 10.0.17132.1.
Вопрос. В классическом asp при присвоении значения полю класса или чтении значения из поля теперь требуется намного больше времени, чем ожидалось.
Использование публичных или приватных (с геттерами / сеттерами) не влияет на скорость.
Я проверил проблему на одном из наших серверов, и проблема не затронута. Он работает примерно так же, как раньше.
Я включил свой тестовый скрипт ниже. Вот результаты тестов, которые мы видим.
время сервера.
Количество: 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")
%>
Я часами искал в Интернете что-нибудь, связанное с этим, но не смог ничего найти.
Итак,
кто-нибудь еще видел эту проблему?
это влияет на окружение разработчика?
У кого-нибудь есть идеи, как решить эту проблему?