Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
"SELECT * FROM %Dictionary.CompiledClass", 18 секунд, .NET
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, у меня Cache сборки 2011.1.0.532.0. Пишу приложение, которое работает с иерархией классов. В идеале хочется, чтобы можно было строить дерево классов при помощи компонента TreeView. Писал код с рекурсией, который заполняет всё дерево, но это оказалось настолько долго, что я сначаа должен разобраться с малым. Скажите, из-за чего в моём коде запрос выполняется так медленно (18 секунд!), может можно другим способом обратиться к %Dictionary.CompiledClass? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2011, 15:10 |
|
||
|
"SELECT * FROM %Dictionary.CompiledClass", 18 секунд, .NET
|
|||
|---|---|---|---|
|
#18+
ZLOI13Скажите, из-за чего в моём коде запрос выполняется так медленно Предикат LIKE кагбэ скорости и не обещает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2011, 15:47 |
|
||
|
"SELECT * FROM %Dictionary.CompiledClass", 18 секунд, .NET
|
|||
|---|---|---|---|
|
#18+
krvsa , закомментил строчку вывода в treeview. Случай с Like выполняется за 3100, без Like за 3500. Запрос не должен выполняться больше пол секунды, что уж говорить, когда первый раз он выполняется 14-18 секунд. Но, естественно, запрос к пользовательским или демонстрационным классам, а не %Dictionary.CompiledClass, выполняется за 50-150 мс, при таком же количестве экземпляров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2011, 16:23 |
|
||
|
"SELECT * FROM %Dictionary.CompiledClass", 18 секунд, .NET
|
|||
|---|---|---|---|
|
#18+
ZLOI13 krvsa , закомментил строчку вывода в treeview. Случай с Like выполняется за 3100, без Like за 3500. Запрос не должен выполняться больше пол секунды, что уж говорить, когда первый раз он выполняется 14-18 секунд. Но, естественно, запрос к пользовательским или демонстрационным классам, а не %Dictionary.CompiledClass, выполняется за 50-150 мс, при таком же количестве экземпляров. 1. В Вашем случае стоит попробовать %STARTSWITH вместо LIKE. 2. Отбирать все поля в большинстве случаев нежелательно. В %Dictionary.CompiledClass 74! поля, а Вы отбираете только одно. 3. Сколько времени выполняется запрос в портале управления и/или внешней ODBC-программе? (Не забудьте задать значение количества отображаемых записей не меньшее, чем их есть в базе. Либо используйте TOP для обоих запросов - через Вашу программу и через портал/ODBC.) 4. Если использовать вывод в TreeView, то запрос выполняется 18 секунд. Без вывода в TreeView - ~3. Значит либо treeView1.Nodes.Add() выполняется долго, либо reader.GetOrdinal("ID"), либо просто в запросе без вывода Cache уже использовал закешированные результаты. В любом случае Вам стоит обратить внимание на эти операции, т.к. они составляют ~80% всего времени выполнения кода (если причина не в кеше Cache). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2011, 09:42 |
|
||
|
"SELECT * FROM %Dictionary.CompiledClass", 18 секунд, .NET
|
|||
|---|---|---|---|
|
#18+
Вообще говоря, %Dictionary.CompiledClass довольно медленный класс, это происходит от его структуры данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2011, 10:08 |
|
||
|
"SELECT * FROM %Dictionary.CompiledClass", 18 секунд, .NET
|
|||
|---|---|---|---|
|
#18+
Можно глянуть, например, что хранится по классу zw ^oddCOM("%Library.Persistent") считаем строки s g="^oddCOM(""%Library.Persistent"")",i=0 f{s g=$q(@g) q:g="" q:$qs(g,1)'="%Library.Persistent" s i=i+1} w i 615 Т.е. один класс занимает около одного блока данных, а то и больше. пусть чтения блока данных занимает 0.004 сек (250 иопсов на поток). Одних библиотечных классов больше 4000, т.е. это должно быть 4000*.004=16 сек, индексов по super там нет, так что в любом случае запрос будет выбираться перебором. Естественно, данные кэшируются, так что при повторном проходе выборка пройдет быстрее. Скорее странно, что на моем домашнем компе SELECT * FROM %Dictionary.CompiledClass where super like '%Library.Persistent' выполняется 6 секунд (всего) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2011, 10:44 |
|
||
|
"SELECT * FROM %Dictionary.CompiledClass", 18 секунд, .NET
|
|||
|---|---|---|---|
|
#18+
Turk1. В Вашем случае стоит попробовать %STARTSWITH вместо LIKE. Либо завести некий "первородный" абстрактный класс со параметром и делать запросы не из описания классов, а из описания параметров... Т.е. выбрать все классы с наличием такого параметра... Т.о. может быть задействован индекс по имени параметра... Возможно это даст еще большее ускорение... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2011, 12:09 |
|
||
|
"SELECT * FROM %Dictionary.CompiledClass", 18 секунд, .NET
|
|||
|---|---|---|---|
|
#18+
Еще вариант - проекция класса на системный глобал. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. У такого варианта есть ряд недостатков, но Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2011, 12:19 |
|
||
|
"SELECT * FROM %Dictionary.CompiledClass", 18 секунд, .NET
|
|||
|---|---|---|---|
|
#18+
doublefint, Это закэшировалось. После рестарта сервера сколько? Думаю, здесь по super не задействован индекс и особо не выиграешь. Как вариант, можно делать по oddDEF, т.е. по %Dictionary.ClassDefinition ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2011, 17:22 |
|
||
|
"SELECT * FROM %Dictionary.CompiledClass", 18 секунд, .NET
|
|||
|---|---|---|---|
|
#18+
Итак, господа, очень приятно, что вы меня выручили. Выражение: Код: plaintext TurkСколько времени выполняется запрос в портале управления и/или внешней ODBC-программе? Turk , первый раз 600мс, следующие 50-90мс. doublefint , очень интересный вариант, думаю немного такой глубокой системщины не повредит :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2011, 04:55 |
|
||
|
|

start [/forum/topic.php?fid=39&msg=37444671&tid=1557642]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
4ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 380ms |

| 0 / 0 |
