|
Вопрос про сервера ... | ☑ | ||
---|---|---|---|---|
0
lamme
25.09.20
✎
15:02
|
Что есть
сервер 1 (скульный. отдельновыделенный. только скуль. и все. мощный. красивый. блестящий .. ) сервер 2 (для клиентов рдп) УТ11,4 платформа 1С:Предприятие 8.3 (8.3.17.1549) Что делается На клиенте идет чтение ексель файла в 25 000 строк и заполнение табличной части этоже обработки // это на клиенте Попытка ex = ПолучитьCOMобъект("","Excel.Application"); Исключение Сообщить("Excel Application не создан!!"); Возврат; КонецПопытки; Попытка ex.workbooks.open(Файл,1); Исключение Сообщить("Файл перемещен или удален!"); Возврат; КонецПопытки; RCount = ex.ActiveSheet.UsedRange.Rows.Count(); Для j = 2 по RCount цикл Если СокрЛП(ex.ActiveSheet.Cells(j,1).Value)="" Тогда Продолжить; КонецЕсли; Нстр = объект.Товары.Добавить(); Нстр.СкладСтрока = ex.ActiveSheet.Cells(j,1).Value; и тд и тп вот если весь файл так прочитать - то 50 мин занимает время. если добавить строку Нстр = объект.Товары.Добавить(); Нстр.СкладСтрока = ex.ActiveSheet.Cells(j,1).Value; Нстр.СкладСсылка = найтиСкладПоимениНаСервере(Нстр.СкладСтрока) и &НаСервере Функция ОпределитьСклад(имясклпда) РезПСклада = Справочники.Склады.НайтиПоНаименованию(имясклпда,истина); Если РезПСклада = Справочники.Склады.ПустаяСсылка() тогда НовыйСклад = Справочники.Склады.СоздатьЭлемент(); НовыйСклад.Наименование = имясклпда; НовыйСклад.Записать(); СкладСылка= НовыйСклад.ссылка; иначе СкладСылка= РезПСклада.ссылка; конецесли; возврат СкладСылка конецфункции то время увеличивается на стотыщ дохринилиново часов (конкретно - 4ч - 50%) косяк знаю 1. нельзя дергать сервер в цикле 2. надо на скуль сервере читать файл, передавая его через хранилище (повторю - на скуль-севрере нет екселя) но .. отладчик показывает - что Нстр.СкладСсылка = найтиСкладПоимениНаСервере(Нстр.СкладСтрока) занимает 62% времени при чтении одной строки. (сама процедура поиска и возврата значения - где-то в конце временной таблицы замера производительности) я правильно понимаю - это передача с клиента на сервер текстовой строки столько времени жрет ? |
|||
1
lamme
25.09.20
✎
15:02
|
или я что то не понимаю ?
|
|||
2
lamme
25.09.20
✎
15:04
|
не .. я конечно где-то видел
как ексель читают иным методом . гораздо продуктивнее но он вроде на сервере делается и все так же - через открыть ексель и массивом его прочитать .. так что тот не подходит |
|||
3
Ёпрст
25.09.20
✎
15:05
|
(0) ну создай соответствие складов твоим строкам, и только если в соответствии нема - ищи на сервере, клади в соответствие.
|
|||
4
lamme
25.09.20
✎
15:08
|
это понятн
это методы оптимизации. не в этом вопрос. а в том - чезатормоза такие при передаче с клиента на сервер это у платформы баг это ппц как настроена сеть или тупые сервера или кривые руки мои ? |
|||
5
polosov
25.09.20
✎
15:13
|
(0) Читай эксель в ТабличныйДокумент. Будь мужиком, блеат!
|
|||
6
H A D G E H O G s
25.09.20
✎
15:15
|
(4) Руки
|
|||
7
lamme
25.09.20
✎
15:17
|
(6)
обоснуй почему мои руки - если Нстр.СкладСсылка = найтиСкладПоимениНаСервере(Нстр.СкладСтрока) занимает 62% времени при чтении одной строки. |
|||
8
RomanYS
25.09.20
✎
15:17
|
(4) кривые руки. Прочитай файл (если уж приспичило на клиенте), уйди на сервер один раз и обрабатывай.
И даже на сервере делать поиск по справочнику 25к раз - это ппц, закешируй в соответствие как написано в (3) |
|||
9
H A D G E H O G s
25.09.20
✎
15:18
|
(7) Потому что контекстный вызов
|
|||
10
arsik
гуру
25.09.20
✎
15:18
|
(4) Кривые руки &НаСервере заменить на &НаСервереБезКонтекста
|
|||
11
RomanYS
25.09.20
✎
15:18
|
(7) в цикле с клиента на сервер ходить!? Там хотя бы "без контекста"?
|
|||
12
lamme
25.09.20
✎
15:19
|
Прочитай файл (если уж приспичило на клиенте) - 25 000 строк на клиенте читает - 1ч -12 000
|
|||
13
H A D G E H O G s
25.09.20
✎
15:19
|
Как я вижу такие ветки
https://coub.com/view/2jbxaw |
|||
14
H A D G E H O G s
25.09.20
✎
15:19
|
(12) Вы криво читаете. Надо через ComSafeArray
|
|||
15
lamme
25.09.20
✎
15:20
|
(10)
(11) коллеги я это понимаю - что чтение в цикле и дерганье сервер - это полный - отрывание рук по самые гланды но не вэтом ж вопрос. или в этом - как раз таки - от того - что так часто дергается сервер - вот оно и тормозит ? |
|||
16
RomanYS
25.09.20
✎
15:21
|
(15) именно так. В твоем случае мало того что дергается, так ты туда на каждом вызове всю форму таскаешь
|
|||
17
RomanYS
25.09.20
✎
15:22
|
(12) бред. Читай по-другому. Или найди, что тормозит, и убери
|
|||
18
lamme
25.09.20
✎
15:22
|
(16)
понял. --- |
|||
19
lamme
25.09.20
✎
15:24
|
просто на ут10 такое считвалется за 6 мин
(но- другой сервер) |
|||
20
lamme
25.09.20
✎
15:24
|
при таком же считывании
|
|||
21
RomanYS
25.09.20
✎
15:25
|
(18) Безконтекста даст тебе ускорение в разы,
перевод цикла на сервер - на порядки, (3) конкретно эту строку может в разы ускорить относительно выполнения уже на сервере |
|||
22
lamme
25.09.20
✎
15:27
|
по всем параметрам - сервера вообще спят ..
сеть спит жесткий - спит память - не используется и тд и тп... а работа через ком ... ну просто жесть |
|||
23
lamme
25.09.20
✎
15:28
|
лажно коллеги ..
спасибо за советы и срач ) все как всегда ничего не меняется |
|||
24
polosov
25.09.20
✎
15:35
|
(22) Да забудь ты про ком.
ТабДок = Новый ТабличныйДокумент.Прочитать("Мойфайл.xlsx"); И читаешь через Область |
|||
25
polosov
25.09.20
✎
15:35
|
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать("Мойфайл.xlsx"); |
|||
26
lamme
25.09.20
✎
15:36
|
это кому интересно
отладчик замер производительности сек за 10 примерно https://c2n.me/49dhbjZ как видите -все равномерно считывается все колонки екселя - в табличную часть обработки .. нет рывков .. стабильно и стабильно долго ) |
|||
27
lamme
25.09.20
✎
15:36
|
25
а дпльше пример можно ? |
|||
28
arsik
гуру
25.09.20
✎
15:37
|
(27) Ой да открой уже для себя гугл.
|
|||
29
lamme
25.09.20
✎
15:37
|
те какую область установить чтобы считать все 36 колонок екселя
и на энн строк и как потом к каждому значению обратиться ? |
|||
30
lamme
25.09.20
✎
15:38
|
да. все. отбой
|
|||
31
lamme
25.09.20
✎
15:39
|
тогда опять не понимаю
одни и те же методы на ут10 и ут11 работаюи по разному ? |
|||
32
RomanYS
25.09.20
✎
15:43
|
(31) Конечно по разному. В УТ10 ты сидишь на клиенте периодически подергивая сервер (там кстати тоже твое найтиСклад... это запрос в цикле), а на УФ ты таскаешь форму между сервером и клиентом
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |