|
Как оптимизировать код и ускорить выполнения программы?
|
|||
---|---|---|---|
#18+
Уважаемые! Кто поможет прояснить ситуацию с производительностью? В частности меня интересует - как приблизительно определить ресурсоёмкость программы или кода? Разговор идет не столько об объёме хранемой информации в переменных, сколько о замысловатостях функций. На кто конкретно стоит обращать внимание при написании кода? Думал, чем больше действий (строк кода), тем больше процессов будет выполнять программа и это влияет на ее производительность. Но.. Хочу навести одну ситуацию - реализовал задачу двумя похожими способами и меня удивило то, что у них была одинаковая производительность! Имею ввиду количество обработанных фалов за 1 мин. Хотя в одном из них использовал глобальные переменные (слышал о том, что они сильно нагружают оперативку), да и функций с кодом больше. Считал, что второй способ будет шустрее - но оказалось одинаково! Как нибудь можно ускорить производительность? Например, если сначала полученные добавить в массив, а добавить через range - может ускорить процесс? Скажу сразу, стараюсь пользоваться такой логикой, которую можно использовать в другом языке, а не встроенными методами эксель. Задача - имеются однотипные паспорта сделок менеджеров за несколько лет, требуется получить значения из известных ячеек и данные файла - путь, наименование и т.п.. Структура - общая папка - в ней папки по каждому сотруднику - в них подпапки с контрагентам - а те в свою очередь могут содержать другие подпапки, например, архив с паспортами за прошлый год или с другой информацией. В них же и файлы xls. Но офисные планктоны не стремились к порядку, поэтому файлы xls могут находится как в коренной папке, так и в подпапках. За основу взял FDO для обоих способов процедура - fsoObj - вызывает рекурсивную процедуру screachFilesFolder(fso.GetFolder(str)) 'путь на общую папку Та через For Each.. перебирает сначала файлы эксель, далее также перебирает рекурсивно подпапки с вызовом screachFilesFolder(folderSub) Способ первый 'переменные модуля Private wbObj As New obj 'встроенный класс, найденный эксель Private enterObject As activeWB 'Type модуля, книга для данных call fsoObj - call screachFilesFolder(fso.GetFolder(str)) - вызывает процедуру - outDataObject *** Процедура outDataObject(fileFolder.Name, fileFolder.Path, currentFolder.ParentFolder.Name, currentFolder.Name) - присваивает значения свойствам переменной wbObj Application.ScreenUpdating = False Application.DisplayAlerts = False Set wbData = GetObject(PathFile) 'обращаемся к найденному файлу .Трейдер = wbData.Sheets(1).Cells(6, 3).Value 'определяем значение свойству .ИмяФайла = NameFile Call enterDataObject 'вызывает конструктор моего файла для добавления полученных данных (ниже коротко) wbData.Close 'закрываем файл *** Функция enterDataObject - определяет значения переменной enterObject, его свойства - это ячейки для добавления данных With enterObject Set .wbBook = Workbooks("MyBookData") 'моя книга Set .sh = .wbBook.Sheets(.numSheetData) 'лист для данных, если больше 65000 срок, переходит на другой лист .cellLastRow = .sh.Cells(Rows.Count, 1).End(xlUp).Row 'последняя заполненная ячейка Set .ТрейдерБаза = .sh.Cells(.cellLastRow + 1, 3) 'определяет свойство as Object Set .ИмяФайлаБаза = .shТест.Cells(.cellLastRow + 1, 8) End With Call constructorBase 'заполняет данные ** Процедура constructorBase - добавляет данные в мой файл With enterObject .ТрейдерБаза.Value = wbObj.Трейдер .ИмяФайлаБаза.Value = wbObj.ИмяФайла End With *** в завершении - CLEARDataObject - Все удаляем и очищаем Set fso = Nothing Set fileFolder = Nothing Set folderSub = Nothing Set wbObj = Nothing Set wbData = Nothing Set enterObject = Nothing *** Второй способ call fsoObj - call screachFilesFolder(fso.GetFolder(str)) - вызывает процедуру - constructorData *** Процедура constructorData(NameFile As String, PathFile As String, paråntFolder As String, curFolder As String) - добавляет данные Application.ScreenUpdating = False Application.DisplayAlerts = False Set wbData = GetObject(PathFile) 'найденный файл Set wbBook = Workbooks("MyBook") 'мой файл cellLastRow = wbBook.Sheets(numSheetData).Cells(Rows.Count, 1).End(xlUp).Row 'последняя ячейка, если больше 65000 срок, переходит на другой лист wbBook.Sheets(numSheetData).Cells(cellLastRow + 1, 3).Value = wbData.Sheets(1).Cells(6, 3).Value 'добавляем значение Трейдер wbBook.Sheets(numSheetData).Cells(cellLastRow + 1, 8).Value = NameFile 'имя файла wbData.Close Application.ScreenUpdating = True Application.DisplayAlerts = True *** ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2016, 18:52 |
|
Как оптимизировать код и ускорить выполнения программы?
|
|||
---|---|---|---|
#18+
Я уже просил в предыдущем топике научиться оформлять код с помощью тэгов... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2016, 21:19 |
|
Как оптимизировать код и ускорить выполнения программы?
|
|||
---|---|---|---|
#18+
Shocker.Pro, ну не умею я.. не получается... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2016, 21:22 |
|
Как оптимизировать код и ускорить выполнения программы?
|
|||
---|---|---|---|
#18+
То есть выделить жирным получается, а то же самое сделать с кодом не получается? И даже не получается нажать "цитировать" там, где уже код оформлен, и посмотреть, как это сделано? Тренируйтесь http://www.sql.ru/forum/test ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2016, 08:56 |
|
Как оптимизировать код и ускорить выполнения программы?
|
|||
---|---|---|---|
#18+
львиная доля времени тратится на открытие файлов, поэтому оптимизация кода результата не даст. даст результата хранение файлов на ssd. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2016, 10:15 |
|
Как оптимизировать код и ускорить выполнения программы?
|
|||
---|---|---|---|
#18+
Нормальный парень В частности меня интересует - как приблизительно определить ресурсоёмкость программы или кода? Тормозит - значит низкая производительность, летает - высокая ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2016, 09:31 |
|
Как оптимизировать код и ускорить выполнения программы?
|
|||
---|---|---|---|
#18+
А сколько ресурсов потребляет - это можно посмотреть в диспетчере задач, на сколько грузит процессор и сколько потребляет памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2016, 09:34 |
|
Как оптимизировать код и ускорить выполнения программы?
|
|||
---|---|---|---|
#18+
Antonariyдаст результата хранение файлов на ssd. А вот тут можно подробнее? Что это за штуковина такая "ssd" и с чем ее едят? Этот скрипт обошел несколько тысяч файлов, первая сотня быстро прошла, а далее стало медленнее. Но комп не тормозил, в стандартном режиме работал. Обратил внимание на то, что много времени уходило на "перенос" значений. Есть основание предполагать, что даже может повлиять на производительность свойство FormulaR1C1 вместо Value. Но основное я понял - циклы и условия сильно тормозят процесс. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2016, 18:25 |
|
Как оптимизировать код и ускорить выполнения программы?
|
|||
---|---|---|---|
#18+
Нормальный пареньпервая сотня быстро прошла, а далее стало медленнее.Посмотрите, нет ли утечки памяти ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2016, 19:09 |
|
Как оптимизировать код и ускорить выполнения программы?
|
|||
---|---|---|---|
#18+
Нормальный пареньAntonariyдаст результата хранение файлов на ssd. А вот тут можно подробнее? Что это за штуковина такая "ssd" и с чем ее едят? https://market.yandex.ru/catalog/91033/list?hid=91033&track=fr_cm_params&glfilter=2141164606:6401445&deliveryincluded=0&onstock=1 Нормальный пареньЭтот скрипт обошел несколько тысяч файлов, первая сотня быстро прошла, а далее стало медленнее. Но комп не тормозил, в стандартном режиме работал. Обратил внимание на то, что много времени уходило на "перенос" значений. следите за памятью, потребляемую экселем, в диспетчере задач. скорее всего действительно есть утечка, и тормоза начались, когда оперативка исчерпалась и система начала использовать файл подкачки. Нормальный пареньНо основное я понял - циклы и условия сильно тормозят процесс.сами по себе они не тормозят. вопрос в том, что в них сравнивается и крутится. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2016, 17:39 |
|
Как оптимизировать код и ускорить выполнения программы?
|
|||
---|---|---|---|
#18+
Нормальный пареньShocker.Pro, ну не умею я.. не получается... если у вас не хватает мозгов отформатировать своё сообщение, то вряд ли хватит ума оптимизировать свой код. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2016, 13:08 |
|
Как оптимизировать код и ускорить выполнения программы?
|
|||
---|---|---|---|
#18+
Оффтопик, ибо ветка все равно протухла Роман - какими судьбами у нас в VB? - ты чего вдруг без работы? - куда дел буквы "З" и "Ъ"? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2016, 13:21 |
|
Как оптимизировать код и ускорить выполнения программы?
|
|||
---|---|---|---|
#18+
Shocker.ProОффтопик, ибо ветка все равно протухла Роман - какими судьбами у нас в VB? - ты чего вдруг без работы? - куда дел буквы "З" и "Ъ"? 1. =) ну я раньше был фанат QB, PDSBasic и на VB тоже писал :) вот зашел глянуть, что нового :) и вижу, что всё по старому :) 2. Работа сдохла :) 3. Дома клаву дети сломали ) новая только едет :) ждать еще 2 недели, у меня уже глаз дёргается ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2016, 14:37 |
|
Как оптимизировать код и ускорить выполнения программы?
|
|||
---|---|---|---|
#18+
По старому... а что у нас может быть нового? )) Работу жаль. Почему у вас там спецы твоего уровня на фуллтайм? Вот у меня в шкафу на балконе всегда лежит запасная клава... хотя детей нет ) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2016, 14:56 |
|
|
start [/forum/search_topic.php?author=sazeek1111&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 728ms |
total: | 878ms |
0 / 0 |