sysprg2e
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Маленькое выступление по поводу ОПТИМИЗАЦИИ PShell кода: в ходе написания парсера SMBIOS, мне пришлось создавать множество простейших функций, переводящих значение цифрового кода в строковое значение. Для маленьких табличек я не задумываясь использовал конструкцию SWITCH до тех пор, пока не налетел на 4000+ таблицу кодов и строк, соответствующих производителям железа. Вот в этот момент я тут же осознал, "Дебил, ну кто же тебя учил код писать, неужели не понимаешь, что как минимум бинарный поиск надо использовать!" Но немного подумав, пришел к выводу о том, что и бинарный поиск совершенно лишний, поскольку использовать можно ПРЯМУЮ АДРЕСАЦИЮ. В итоге функция с говорящим именем Get-VendorByCode стала выглядеть вот так: Код: function Get-VendorByCode( [uint16]$code ) { $C0001 = "Fry's Electronics"; $C0002 = "Ingram"; $C0003 = "Club Mac"; $C0004 = "Nebraska Furniture Mart"; .................... $CFA57 = "Interagon A"; $vn = "C{0:x4}" -f $code; $vv = Get-Variable "$vn" -ValueOnly -ea SilentlyContinue -ev error; if ( $error ) {return "*** Value for the code $code is not defined";} return "$vv"; } | Несомненно, что в моем случае, при парсинге одного единственного SMBIOS, выигрыш от подобной "оптимизации", совершенно не ощутим, но вот в случае выдачи тысяч запросов к базам данных, метод, использованный для замены тупого, прямолинейного SWITCH с прямым перебором в худшем случае ВСЕХ значений, даст весьма ощутимый выигрыш. Несомненно также, что ОПЫТНЫЕ программисты все это прекрасно знают, но среди тем форума часто встречаются и вопросы от студентов, которым описанная техника, НАДЕЮСЬ, может пригодиться. P.S: Приведенные выше коды и их интерпретация, взяты из документа SMBIOS-DSP0134_3.0.0.pdf. | Всего записей: 4 | Зарегистр. 16-12-2017 | Отправлено: 16:04 24-12-2017 | Исправлено: IFkO, 17:38 24-12-2017 |
|