ASP-Classic - Назначение значений для полей в классе очень медленно, так как одно из последних обновлений Windows в этом году - PullRequest
0 голосов
/ 28 августа 2018

В начале этого года у нас была проблема с одним из моих коллег-разработчиков, я исследовал проблему и выяснил ее. Единственное главное отличие его и моих машин в том, что я не запускал обновления 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")
%>

Я часами искал в Интернете что-нибудь, связанное с этим, но не смог ничего найти.

Итак,

кто-нибудь еще видел эту проблему?

это влияет на окружение разработчика?

У кого-нибудь есть идеи, как решить эту проблему?

1 Ответ

0 голосов
/ 31 августа 2018

Спасибо @ Эрик

Я хотел бы проголосовать за вас, но, похоже, у меня нет стрелок вверх рядом с вашим комментарием. Но большое спасибо.

Да, версия vbscript.dll на сервере была другой. Я заменил эти библиотеки DLL в своей среде разработки и на моей рабочей машине, и проблема исчезла. Мы отслеживаем журналы, чтобы увидеть, есть ли какие-либо негативные последствия использования DLL серверов, но пока все выглядит хорошо.

Прежде чем я смог заменить их, пришлось взять на себя владение библиотеками 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 (разные размеры файлов, но это следовало ожидать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...