Загадка для знатоков RSL (Или как ускорить RSL)
0 (0)
Загадка для знатоков RSL (Или как ускорить RSL) ( LeonL 11.10.2013 10:46 )
5(1)Все мы часто так или иначе используем RSL, и всем нам хочется чтобы язык работал без косяков с наибольшей отдачей, но к
сожалению с тех пор как Кубрин больше не занимается его развитием, к компании боятся что либо в нем менять, и никакого развития
с 2009 года нет, и косяки никто не исправляет и нам как клиентам приходится самим искать пути решения своих проблем.
Вот как раз пример такого косяка:
http://support.softlab.ru/Portal/InterSupport/topic.asp?id=262136&Page=3&FilterId=113&Which=a&SortOrder=0
А теперь собственно перейдем к другому косяку который я нашел на днях.
Вот коротенький пример:
class testm( count ) var a=TArray(100000,100000); var b=TArray(100000,100000); var i=0; InitProgress(count,"",""); while (i< count) UseProgress(i); a[a.size]=Tarray; b[b.size]=Tarray; i=i+1; end; RemProgress(); MsgBox("А сейчас я зависну"); end; testm( 100000 ); MsgBox("Не прошло и года");
А теперь внимание вопрос:
Чем занимается система в промежутке между "А сейчас я зависну" до "Не прошло и года" у нас возникает пауза порядка минуты,
при том что на создание класса ушла всего секунда.
PS: Давайте вспомним все места в рске где используются классы, это печать документов, загрузки документов и т.д и т.п и всезде есть эти тормоза
просто количество классов 1000-2000 и задержки не так велики, но они есть просто мы считаем что это норма и никто не думал почему. А налицо конкретная
ошибка в деструктуризации класса.
PPS: Почему это происходит я догадываюсь, что надо написать после MsgBox("А сейчас я зависну"); для того чтобы небыло этих тормозов я тоже знаю, но
готовый ответ это неинтересно.
>> ОтветитьЗабавный пример ( sokols 11.10.2013 14:13 )
5(1)Хотелось бы знать, что тебя подвигло построить такую конструкцию? ;-)
Что написать-то после MsgBox("А сейчас я зависну");, догадаться несложно. А вот почему так происходит, пока не понял.
>> ОтветитьПолучилось случайно, а чтобы понять в чем причина и сделать тест ушло все утро. ( LeonL 11.10.2013 14:40 )
5(1)Нашел я это вот как:
Сделал класс для формирования отчетности по кредитованию.
Он содержит классы счетов 300тыщ, класс договоров 15 тыщ, класс связей, и функции для работы,
отладил запустил на тестовой (где мало счетов и договоров) все класно, запустил на живую
отчет за минуту вывелся и все зависло, ну думаю сервак тормозит, попробовал с разных машин,
и вот тут меня закусило.
>> ОтветитьА если не секрет что надо написать? ( LeonL 16.11.2013 18:28 )
5(1)Никак не могу подобрать универсальный вариант который работал бы всегда.
>> ОтветитьПосле "А сейчас я зависну" напиши ручной деструктор (+) ( sokols 18.11.2013 14:07 )
5(1)[code] MsgBox("А сейчас я зависну");
i=0;
while (i < a.size)
a[i]=NULL;
b[i]=NULL;
i=i+1;
end;[code]
>> ОтветитьА если последовательность создания неизвестна? ( LeonL 18.11.2013 14:16 )
5(1)Not specified
>> ОтветитьЕсли я правильно понял твой вопрос, то вот мой вариант ( Gigus 25.11.2013 12:37 )
5(1)class testm( count )
var a=TArray(100000,100000);
var b=TArray(100000,100000);
var i=0;
InitProgress(count,"","");
while (i< count)
UseProgress(i);
a[a.size]=Tarray;
b[b.size]=Tarray;
i=i+1;
end;
RemProgress();
MsgBox("А сейчас я зависну");
macro Destructor()
i = 0;
while (i < a.size)
a[i] = null;
b[i] = null;
i = i + 1;
end;
end;
end;
test = testm( 100000 );
MsgBox("Не прошло и года");
>> ОтветитьУпс, забыл теги вставить ( Gigus 25.11.2013 12:40 )
5(1)class testm( count ) var a=TArray(100000,100000); var b=TArray(100000,100000); var i=0; InitProgress(count,"",""); while (i< count) UseProgress(i); a[a.size]=Tarray; b[b.size]=Tarray; i=i+1; end; RemProgress(); MsgBox("А сейчас я зависну"); macro Destructor() i = 0; while (i < a.size) a[i] = null; b[i] = null; i = i + 1; end; end; end; test = testm( 100000 ); MsgBox("Не прошло и года");
>> ОтветитьВсе это замечательно, но к сожалению не всегда работает. ( LeonL 25.11.2013 14:25 )
3(2)Грубо говоря в реальной задаче, выделение переменных идет не линейно, и в деструкторе нельзя с точностью повторить порядок удаления.
>> Ответить