|
Ускорить заполнение экземпляров класса данными
|
|||
---|---|---|---|
#18+
Здравствуйте! Во вложенном excel-ом файле на вкладке "Исходные данные" присутствуют данные, которые получены с помощью выгрузки. Задача такая, что из этих данных нужно получить уникальный список экземпляров класса (ТТ+SKU+ДатаНачала+ДатаОкончания), и потом раскидать данные по соответствующим экземплярам класса. Далее по каждому экземпляру происходят цепные расчеты по дням. В данном примере цепные расчеты не приведены и в коде в классе отсутствуют свойства для результатов. В общем, код написан, код работает. Но есть но. 1. Мне кажется что я не совсем правильно написал код. Потому что, если 500 000 строк, то долго считывает, потом для заполнения каждого экземпляра класса нужно пробегаться по всем строкам, и если находит берет данные с текущей строки и вставляет в соответствующие экземпляры. Потом долго происходит цепные расчеты в каждом экземпляре, хотя это другой вопрос. Можно ли как оптимизировать считывание данных с листа, поиск уникальных, создание экземпляров классов и заполнение их по определенной логике, чтобы быстрее работало? 2. После того, как созданы и заполнены все экземпляры классов, но до цепных расчетов, то есть необходимость сохранять сами экземпляры с данными в каком то формате. Чтобы потом заново не считывать с листа, а выгрузить с того файла, где данные не просто как реляционная таблица, а как экземпляры класса. И после проведения цепных расчетов в этом файле заполняются результаты расчетов. Это возможно как то сделать? Есть такой формат данных? Не обращайте внимание, что переменные на русском языке, это чтобы код был легок в понимании. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2017, 18:38 |
|
Ускорить заполнение экземпляров класса данными
|
|||
---|---|---|---|
#18+
ferzmikk, пути ускорения : 1. Закинуть Range в массив и дальше выполнять итерации по массиву, а не по листу. 2. Закинуть 500 000 строк в mdb , повесить ключ для отбора уникальных записей и работать через KeySet Recordset. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2017, 20:51 |
|
Ускорить заполнение экземпляров класса данными
|
|||
---|---|---|---|
#18+
ferzmikkМожно ли как оптимизировать считывание данных с листа, поиск уникальных, Есть средство удаления дубликатов. Запусти его вручную под запись, получишь код, который стопудово будет эффективнее твоего. ferzmikkвыгрузить с того файла, где данные не просто как реляционная таблица, а как экземпляры класса. И после проведения цепных расчетов в этом файле заполняются результаты расчетов. Это возможно как то сделать? Есть такой формат данных?Выгрузить объекты в файл As Binary, и загрузить из файла... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2017, 21:06 |
|
Ускорить заполнение экземпляров класса данными
|
|||
---|---|---|---|
#18+
ferzmikk, если речь идет об оптимизации, то хранение данных в экземпляре класса противопоказано. И если уж делать так, то не использовать процедуры Property Get и Property Let, а просто объявить переменные класса как Public. Вот сравнение времени доступа к переменным класса через Property, напрямую, а также к аналогичной переменной пользовательского типа и к локальной переменной. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48.
Мои результаты: Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2017, 11:20 |
|
|
start [/forum/topic.php?fid=61&msg=39574606&tid=2172452]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 323ms |
total: | 442ms |
0 / 0 |