Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Ускорение обработки

Ответить
Настройки темы
PowerShell - Ускорение обработки

Пользователь


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

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


Доброго времени суток!

Есть рабочий код.
кусок
Код: Выделить весь код
								
#-->Заполнение 1 листа (координаты)
if ($DocVers -eq "09") {
	$Row = $s1.Range("A65536").End(-4162).Row + 1
	$oXmlDocument.KPT.CadastralBlocks.CadastralBlock.Parcels.Parcel |`
	ForEach-Object -Process {
		$CadNumUch = $_.CadastralNumber
		$_.EntitySpatial.SpatialElement.SpelementUnit |`
		ForEach-Object -Process {
			# Заполняем
			$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 "\.",",")
			$Row++
		}
	}
}


из XML берутся сведения и заполняются в Excel. Но так как данных бывает много, то обработка длится весьма продолжительное время (бывает и 10 минут и 15 и 20)

Возможно ли как то ускорить процесс или хоть приделать прогресс-бар какой?

Отправлено: 08:22, 13-04-2017

 
mwz mwz вне форума

Аватара для mwz

Ушел из жизни


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

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


Цитата firstarey:
из XML берутся сведения и заполняются в Excel »
У нас одна из бухов тем же занимается. Было: "Запускаю расчёт с утра — хорошо если к концу рабочего дня закончит". Стало: "Запускаю расчёт, иду к девочкам попить чайку, возвращаюсь — а уже всё готово!".

Что было сделано:
1. Пятилетний компьютер был заменён на современный с процессором i5 — но только это такого прироста не дало бы.
2. В качестве винчестера установлен SSD. Поскольку операция связана со множественным чтением и записью файлов, в т.ч. временных — это дало основное ускорение.

-------
Mikhail Zhilin


Отправлено: 10:17, 13-04-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


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

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


Цитата mwz:
Пятилетний компьютер был заменён на современный »
не актуально.
1. компьютер с SSD, процессор AMD FX-8320E, памяти 8 гб.
2. файл обрабатывается 1, находиться на сервере (не на этом компьютере)

Вопрос именно в том как оптимизировать процесс чтения и записи в PS?
у меня сейчас код "читает xml-пишет xlsx" и так по кругу, а значений много.
Может, если сначала поймать все нужные значения и только потом их записать в ексель, будет прирост производительности ?

Отправлено: 11:22, 13-04-2017 | #3


Ветеран


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

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Ускорение обработки

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочее - Ускорение интернета Pasha_prof_1985 Сетевые технологии 3 21-10-2014 13:55
Устройст800о обработки изображений tobolak Поиск драйверов, прошивок и руководств 2 16-11-2013 10:57
Ускорение приложений ElemenTall Непонятные проблемы с Железом 4 27-11-2009 11:33
Прочее - Ускорение Linux RasKolbas Общий по Linux 7 18-11-2009 07:33
Ускорение винта?? KILLOR666 Хочу все знать 1 15-05-2005 09:56




 
Переход