Добрый день.
Версия 10.0.0.8512u.x64 - но эта проблема была еще в Zulu 8.
Суть: есть некий макрос (пример ниже), при его запуске он отрабатывает примерно за секунд 20-30 ( в зависимости от размера сети), где элементов в сети примерно 400. Если запускать макрос много раз (больше 10-15) то с каждым разом он будет выполнятся все дольше. Вполь до того, что сеть из 10 элементов обработает за минут 10!
Возможно макрос я написал коряво и не эффективно, однако думаю что независимо от количество запусков, время выполнение должно быть примерно одинаково, а не отличатся в сотни раз.
При этом перезагрузка клиента не помогает, решается перезагрузкой сервера Zulu.
Вопрос: в чем проблема?
Версия 10.0.0.8512u.x64 - но эта проблема была еще в Zulu 8.
Суть: есть некий макрос (пример ниже), при его запуске он отрабатывает примерно за секунд 20-30 ( в зависимости от размера сети), где элементов в сети примерно 400. Если запускать макрос много раз (больше 10-15) то с каждым разом он будет выполнятся все дольше. Вполь до того, что сеть из 10 элементов обработает за минут 10!
Возможно макрос я написал коряво и не эффективно, однако думаю что независимо от количество запусков, время выполнение должно быть примерно одинаково, а не отличатся в сотни раз.
При этом перезагрузка клиента не помогает, решается перезагрузкой сервера Zulu.
Вопрос: в чем проблема?
Код |
---|
Sub Num_Opora Const eIncidentAll = 3 Const eNetworkAll = 3 ' ActiveX enumeration values definitions end Set L = Zulu.ActiveMapDoc.Layers.Active L.NetworkTools.ClearResults L.NetworkTools.ClearOverloadedStates L.NetworkTools.ClearFlags tp = L.CurrentID L.NetworkTools.AddFlag tp Zulu.ActiveMapDoc.Refresh 1 L.NetworkTools.FindConnected L.Selection.ModifyByKeys 1, L.NetworkTools.Results L.ExecSQL("upd ate set [tp_sys] = " + cstr(tp) + " where geometry.selected() = 1") Se t keys = L.Selection set keys2 = keys.ElementKeys set all_sys_uch = keys2.SelectByType(4, 0) For i = 1 to all_sys_uch.Count sys_uch = all_sys_uch.Item(i) Set nwo = L.NetworkObjects (eNetworkAll) nwo1 = nwo.GetIndexByKey (sys_uch) key_end = nwo.KeyEnd(nwo1) key_begin = nwo.KeyBegin(nwo1) L.ExecSQL("upd ate set [start_sys] = " + cstr(key_begin) + " where typeid = 4 and sys = " + cstr(sys_uch)) L.ExecSQL("upd ate se t [end_sys] = " + cstr(key_end) + " where typeid = 4 and sys = " + cstr(sys_uch)) L.ExecSQL("upd ate se t [opora_sys] = " + cstr(key_begin) + " where typeid = 3 and sys = " + cstr(key_end)) Next Se t keys2 = L.NetworkTools.Results.SelectByType (2 , 0) cnt = keys2.Count Set opora_k = L.ExecSQL("upd ate set [RootLevel_1] = null where geometry.selected() = 1 ") For j = 1 To cnt sys_opora = keys2.Item(j) kol_svet = "SELECT count([sys]) WHERE opora_sys = " + cstr(sys_opora) + " and typeid = 3" Se t Result = L.ExecSQL(kol_svet) kol_u = "SELECT count([sys]) WHERE start_sys = " + cstr(sys_opora) + " and typeid = 4" Set Result_u = L.ExecSQL(kol_u) If (Result_u.DataSet.FieldValue(0) - Result.DataSet.FieldValue(0)) >0 Then Set opora_p = L.ExecSQL("upd ate set [RootLevel_1] = 0 where sys = " + cstr(sys_opora)) End if Se t opora_k = L.ExecSQL("upd ate set [RootLevel_1] = 1 where [RootLevel_1] is null and geometry.selected() = 1 ") Next Se t NObjects = L.NetworkObjects (eNetworkAll) ''' Set Tree = L.GetShortWayTree(tp) Set keys = L.Selection set keys2 = keys.ElementKeys Set Keys = keys2.SelectByType (2, 0) cnt = Keys.Count For j = 1 To cnt Set Item = Tree.ItemById(Keys(j)) Set sql_1 = L.ExecSQL("upd ate set l_tp = " & Item.RootLength & " where Sys = " + CStr(Item) + "") Next nn = 1 Se t ways= L.ExecSQL("SELECT sys, l_tp where typeid = 2 and RootLevel_1 = 1 ORDER BY l_tp ASC") Set list= ways.DataSet list.MoveFirst Do If list.eof = true then exit do Set Way = L.ShortWay (tp, ways.DataSet.FieldValue(0)) For i = 2 To Way.Count ID = Way.Item(i) If i Mod 2 = 0 Then Else Set status = L.ExecSQL("SELECT [num_opora] where typeid = 2 and Sys = " + CStr(ID) + "") If status.DataSet.FieldValue(0) = "" Then L.ExecSQL("update set [num_opora] = " + CStr(nn) + " where typeid = 2 and Sys = " + CStr(ID) + "") nn = nn +1 End if End If Next list.MoveNext Loop L.NetworkTools.ClearResults L.NetworkTools.ClearOverloadedStates L.NetworkTools.ClearFlags L.Themes.UpdateTheme 2 msgbox("Готово") End Sub |