Создал обработку сравнения двух тз по отбору и если запускать обработку с отладчиком, то он быстро сравнивает, а если без отладчика, то он долго стоит загружает, в чем может быть проблема ?

1. lastjudgement 13.09.21 15:26 Сейчас в теме
	МассивУд1 = Новый массив();
	МассивУд2 = Новый массив();
	Для каждого стр из ТЗВД Цикл
		Отбор = Новый Структура();
		Отбор.Вставить("Комментарий",стр.Ссылка);
		Строки=ТабЗнач.НайтиСтроки(Отбор);
		Если Строки.Количество() = 1 Тогда								
				МассивУд1.Добавить(стр);
				МассивУд2.Добавить(Строки[0]);
		КонецЕсли;	
	КонецЦикла;

	
	Для Каждого Строка Из МассивУд1 Цикл
		ТЗВД.Удалить(Строка);
	КонецЦикла;
	
	Для Каждого Строка Из МассивУд2 Цикл
		ТабЗнач.Удалить(Строка);
	КонецЦикла;
Показать
По теме из базы знаний
Найденные решения
21. Sashares 34 14.09.21 16:48 Сейчас в теме
(19) Если нет индексов, значит у тебя не таблица значений.
Тогда так:

    МассивУд1 = Новый массив();
    МассивУд2 = Новый массив();
    ТаблицаДляПоиска = ТабЗнач.Выгрузить();
    ДобавленныйИндекс = ТаблицаДляПоиска.Индексы.Добавить("Комментарий");// добавляем индекс, чтобы поиск выполнялся быстро
    Для каждого стр из ТЗВД Цикл
        Отбор = Новый Структура();
        Отбор.Вставить("Комментарий",стр.Ссылка);
        Строки=ТаблицаДляПоиска.НайтиСтроки(Отбор);
        Если Строки.Количество() = 1 Тогда                                
                МассивУд1.Добавить(стр);
                МассивУд2.Добавить(Строки[0]);
        КонецЕсли;    
    КонецЦикла;

    ТаблицаДляПоиска.Индексы.Удалить(ДобавленныйИндекс);//удаляем индекс, чтобы удаление строк таблицы значений не замедлялось из-за индекса

    Для Каждого Строка Из МассивУд1 Цикл
        ТЗВД.Удалить(Строка);
    КонецЦикла;
    
    Для Каждого Строка Из МассивУд2 Цикл
        ТаблицаДляПоиска.Удалить(Строка);
    КонецЦикла;
    ТабЗнач.Загрузить(ТаблицаДляПоиска);
Показать
lastjudgement; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
13. Sashares 34 14.09.21 16:13 Сейчас в теме
(1) Вставь строку
ТабЗнач.Индексы.Добавить("Комментарий");

до циклов.
И будет выполняться меньше секунды.
15. lastjudgement 14.09.21 16:28 Сейчас в теме
16. Sashares 34 14.09.21 16:31 Сейчас в теме
(15)Покажите весь код и скрин замера
17. Sashares 34 14.09.21 16:37 Сейчас в теме
(15)
Попробуйте так:
МассивУд1 = Новый массив();
    МассивУд2 = Новый массив();
    ДобавленныйИндекс = ТабЗнач.Индексы.Добавить("Комментарий");// добавляем индекс, чтобы поиск выполнялся быстро
    Для каждого стр из ТЗВД Цикл
        Отбор = Новый Структура();
        Отбор.Вставить("Комментарий",стр.Ссылка);
        Строки=ТабЗнач.НайтиСтроки(Отбор);
        Если Строки.Количество() = 1 Тогда                                
                МассивУд1.Добавить(стр);
                МассивУд2.Добавить(Строки[0]);
        КонецЕсли;    
    КонецЦикла;

    ТабЗнач.Индексы.Удалить(ДобавленныйИндекс);//удаляем индекс, чтобы удаление строк таблицы значений не замедлялось из-за индекса

    Для Каждого Строка Из МассивУд1 Цикл
        ТЗВД.Удалить(Строка);
    КонецЦикла;
    
    Для Каждого Строка Из МассивУд2 Цикл
        ТабЗнач.Удалить(Строка);
    КонецЦикла;
Показать
18. lastjudgement 14.09.21 16:39 Сейчас в теме
19. lastjudgement 14.09.21 16:42 Сейчас в теме
21. Sashares 34 14.09.21 16:48 Сейчас в теме
(19) Если нет индексов, значит у тебя не таблица значений.
Тогда так:

    МассивУд1 = Новый массив();
    МассивУд2 = Новый массив();
    ТаблицаДляПоиска = ТабЗнач.Выгрузить();
    ДобавленныйИндекс = ТаблицаДляПоиска.Индексы.Добавить("Комментарий");// добавляем индекс, чтобы поиск выполнялся быстро
    Для каждого стр из ТЗВД Цикл
        Отбор = Новый Структура();
        Отбор.Вставить("Комментарий",стр.Ссылка);
        Строки=ТаблицаДляПоиска.НайтиСтроки(Отбор);
        Если Строки.Количество() = 1 Тогда                                
                МассивУд1.Добавить(стр);
                МассивУд2.Добавить(Строки[0]);
        КонецЕсли;    
    КонецЦикла;

    ТаблицаДляПоиска.Индексы.Удалить(ДобавленныйИндекс);//удаляем индекс, чтобы удаление строк таблицы значений не замедлялось из-за индекса

    Для Каждого Строка Из МассивУд1 Цикл
        ТЗВД.Удалить(Строка);
    КонецЦикла;
    
    Для Каждого Строка Из МассивУд2 Цикл
        ТаблицаДляПоиска.Удалить(Строка);
    КонецЦикла;
    ТабЗнач.Загрузить(ТаблицаДляПоиска);
Показать
lastjudgement; +1 Ответить
22. lastjudgement 14.09.21 16:53 Сейчас в теме
2. Lenten 25 13.09.21 17:09 Сейчас в теме
- размер таблиц сравнить
- замером производительности посмотреть где думает
5. lastjudgement 13.09.21 18:49 Сейчас в теме
(2)
 Строки=ТабЗнач.НайтиСтроки(Отбор);

вот здесь думает 90% времени
3. user790708 13.09.21 17:10 Сейчас в теме
А что говорит замер производительности?
4. lastjudgement 13.09.21 18:48 Сейчас в теме
(3)
 Строки=ТабЗнач.НайтиСтроки(Отбор);

вот здесь думает 90% времени
6. user790708 13.09.21 19:03 Сейчас в теме
(4) Какой размер таблиц? Индексировать по этому полю пробовали?
7. lastjudgement 13.09.21 19:06 Сейчас в теме
8. user790708 13.09.21 19:11 Сейчас в теме
(7) Поле типа строка? Какой длины?
11. lastjudgement 14.09.21 16:10 Сейчас в теме
(8) да, вдвоем строки, 70 символов
10. Lenten 25 14.09.21 09:52 Сейчас в теме
(4)попробовал у себя. 2 таблицы по 3000 строк. ищет меньше секунды. вы это на сервере. может сервер хилый хз
14. lastjudgement 14.09.21 16:21 Сейчас в теме
(10)хмм, нет, по идее не хилый
9. Dr.HiHi 3 14.09.21 08:14 Сейчас в теме
Комментарий - это строка или ссылка??
стр.Ссылка - это строка или ссылка??
а если таблице добавить индексацию??
а если делать через запрос??
12. lastjudgement 14.09.21 16:11 Сейчас в теме
(9) строки вдвоем
хмм, запрос ? как ?
20. Dr.HiHi 3 14.09.21 16:46 Сейчас в теме
(12)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТЗВД", ТЗВД);
Запрос.УстановитьПараметр("ТабЗнач", ТабЗнач);
Запрос.Текст =
"ВЫБРАТЬ
|АВТОНОМЕРЗАПИСИ() КАК НомерСтроки,
|Таблица.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ТЗВД
|ИЗ
|&ТЗВД КАК Таблица
|;
|ВЫБРАТЬ
|АВТОНОМЕРЗАПИСИ() КАК НомерСтроки,
|Таблица.Комментарий КАК Комментарий
|ПОМЕСТИТЬ ТабЗнач
|ИЗ
|&ТабЗначКАК Таблица
|;
|ВЫБРАТЬ
|ТЗВД.НомерСтроки КАК НомерСтроки1,
|МАКСИМУМ(ТабЗнач.НомерСтроки) КАК НомерСтроки2
|ПОМЕСТИТЬ Таблица
|ИЗ
|ТЗВД
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТабЗнач
|ПО ТЗВД.Ссылка = ТабЗнач.Комментарий
|СГРУППИРОВАТЬ ПО
|ТЗВД.НомерСтроки
|ИМЕЮЩИЕ
|КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТабЗнач.НомерСтроки) = 1
|;
|ВЫБРАТЬ
|НомерСтроки1 КАК НомерСтроки,
|1 КАК id
|ИЗ
|Таблица
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ
|НомерСтроки2 КАК НомерСтроки,
|2 КАК id
|ИЗ
|Таблица
|УПОРЯДОЧИТЬ ПО
|НомерСтроки УБЫВ
|";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующая() Цикл
Если Выборка.id = 1 Тогда
Таб = ТЗВД;
Иначе
Таб = ТабЗнач;
КонецЕсли;
Таб.Удалить(Выборка.НомерСтроки-1];
КонецЦикла;
Показать


p.s. код написан от фонаря, так что нужен допил))) но думаю что суть передал
так же не знаю тип сравнивания... возможно нужно будет преобразовать в строку с определенным количество символов... только не в сравнении, а там где временная таблица (типа "|ВЫРАЗИТЬ(Таблица.Комментарий КАК СТРОКА(1000) КАК Комментарий")
возможно добавить индексацию для временных таблиц, которые будут сравниваться
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот