Имя пользователя:
Пароль:
 

Название темы: Ускорение обработки
Показать сообщение отдельно

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата firstarey:
Возможно ли как то ускорить процесс »
Возможно.

1. Сделайте в начале окно приложения-сервера Automation (в данном случае — Excel) невидимым (по куску Вашего «рабочего кода» нельзя судить). Под конец обработки делаете его видимым (если нужно, конечно).
2. Вместо того, чтобы гонять сервер Automation в хвост и гриву, раз за разом тупо проходя по всей иерархии объектов вниз:
Цитата:
Код: Выделить весь код
			$s1.Cells.Item($Row,1) = $CadNumUch
			$s1.Cells.Item($Row,2) = $($_.SuNmb)
			$s1.Cells.Item($Row,3) = $($_.Ordinate.X -replace "\.",",")
			$s1.Cells.Item($Row,4) = $($_.Ordinate.Y -replace "\.",",")
			$s1.Cells.Item($Row,5) = $($_.Ordinate.DeltaGeopoint -replace "\.",",")
создайте один раз наиболее «глубокий» объект и обращайтесь к нему: где-то в начале, до всех циклов Вы создаёте $oCells = $s1.Cells, и далее используете его. Тоже самое с $_.Ordinate — только создаёте его внутри данного цикла. Экономятся, конечно, копейки, но это тот самый случай, когда копейки складываются в секунды, а иногда — в минуты и часы.

Цитата firstarey:
или хоть приделать прогресс-бар какой? »
Возможно. В PowerShell для этого есть специально предназначенные средства.

Цитата firstarey:
Может, если сначала поймать все нужные значения и только потом их записать в ексель, будет прирост производительности ? »
Смотреть надо. В принципе:
Цитата firstarey:
обработка длится весьма продолжительное время (бывает и 10 минут и 15 и 20) »
— это отнюдь не «весьма продолжительное время», тут овчинка выделки не стоит. Ну, разве что где-то явных ляпов не сделано в алгоритме. А так, конечно, можно и на чистый C (не C++) переползти.
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:43, 13-04-2017 | #4

Название темы: Ускорение обработки