Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 | 4 |

 

  Вопрос: Тупой вопрос по структурам Добавлено: 28.09.12 22:40  

Автор вопроса:  Dark Engine | Web-сайт: www.wentas.2bb.ru | ICQ: 343191665 

Ответить

  Ответы Всего ответов: 56  

Номер ответа: 16
Автор ответа:
 Mikle



Вопросов: 5
Ответов: 134
 Профиль | | #16 Добавлено: 02.10.12 09:57
если выбирать между коллекцией и классом, что быстрее работает?

коллекция - это встроенный класс

Не надо путать, мы выбираем между структурой и классом, в результате между коллекцией и массивом. В принципе я первый в п.9 внёс путаницу, правильнее было бы так:
Коллекции работают значительно медленнее массивов.
Но:
Классы работают значительно медленнее структур.

Ответить

Номер ответа: 17
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #17
Добавлено: 02.10.12 15:18
Что-то непонятное написал. В плане, что по скорости обращения нужно сравнивать коллекции только с массивами, а (юзер-) классы только со структурами?

Ответить

Номер ответа: 18
Автор ответа:
 Mikle



Вопросов: 5
Ответов: 134
 Профиль | | #18 Добавлено: 02.10.12 15:48
Winand, я сначала неправильно понял, мне почему-то казалось, что элементы непременно находятся в массиве, к ним нужно обращаться по индексу, сейчас перечитал, дошло - да, в п.9 я верно написал.
Вопрос получается интересный, сразу нужно разделить, в какой момент требуется быстродействие, требуется ли оно в бОльшей степени для получения информации об имени, или для какой-то другой работы (сортировка, к примеру, нахождение среднего арифметического по какому-то полю). Если получение информации об имени нужно только для показа на форму, то, очевидно, быстродействие этого действия не важно, а если мы регулярно сортируем базу ПО ИМЕНАМ - то очень важно.
Вопрос - сколько РАЗНЫХ структур будет в программе, требуется ли к ним обращаться единообразно, чтобы функции было всё равно, какой тип ей подсунули?

Ответить

Номер ответа: 19
Автор ответа:
 Dark Engine



ICQ: 343191665 

Вопросов: 51
Ответов: 98
 Web-сайт: www.wentas.2bb.ru
 Профиль | | #19
Добавлено: 02.10.12 16:18
Mikle пишет:
Вопрос - сколько РАЗНЫХ структур будет в программе

На данный момент их около двух десятков. Из них примерно 12 существуют в единственном числе, по 8 (эта цифра точная) остальным создаются массивы (массив структур есть таблица). Из этих 8 три могут (в силу специфики программы) иметь массивы с размерностью свыше десяти тысяч. Планируется ввод еще одной боевой единицы, которую описать структурой будет проблематично (в силу динамичности генерации полей). Коллекция, кстати, для этого подойдет куда лучше. И эта боевая единица тоже будет существовать в массиве, а самих единиц в программе может существовать примерно с десяток.

Ответить

Номер ответа: 20
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #20
Добавлено: 02.10.12 16:25
в некоторой степени оффтоп: долго экспериментировал с сортировкой и в итоге лучшим решением (при хранении данных в объектах) оказалось предварительное кеширование информации по которой идёт сортировка в массив.

Ответить

Номер ответа: 21
Автор ответа:
 Dark Engine



ICQ: 343191665 

Вопросов: 51
Ответов: 98
 Web-сайт: www.wentas.2bb.ru
 Профиль | | #21
Добавлено: 02.10.12 17:29
Winand пишет:
оказалось предварительное кеширование информации по которой идёт сортировка в массив.

А можно поподробнее?

Ответить

Номер ответа: 22
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #22
Добавлено: 02.10.12 20:31
Есть N объектов с строковым полем "Name" (например). Перед сортировкой создаём строковый массив из N элементов и копируем в него все значения Name. Затем натравливаем на массив всеми любимый алгоритм quick sort, а по мере сортировки этого массива переставляем соответствующие по индексам объекты. Всё.

Ответить

Номер ответа: 23
Автор ответа:
 Dark Engine



ICQ: 343191665 

Вопросов: 51
Ответов: 98
 Web-сайт: www.wentas.2bb.ru
 Профиль | | #23
Добавлено: 03.10.12 09:58
Скорость обращения к строке выше скорости обращения к объекту, быстрая сортировка строкового массива и синхронизация с этим процессом процесса перемещений массива объектов... это снижает в разы количество "медленных" обращений (имеющих под собой цель сравнения), оставляя только самые необходимые, а все сравнение делается "быстрыми" обращениями к строкам. Все гениальное просто. Спасибо! Возьму на вооружение.

Ответить

Номер ответа: 24
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #24 Добавлено: 05.10.12 14:39
:) красота

Ответить

Номер ответа: 25
Автор ответа:
 Mikle



Вопросов: 5
Ответов: 134
 Профиль | | #25 Добавлено: 05.10.12 15:17
Dark Engine, ну как, удалось избавиться от позднего связывания? На vb.net, где есть наследование, от этого можно избавиться, на vb6 что-то не представляю как.

Ответить

Номер ответа: 26
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #26
Добавлено: 05.10.12 15:50
Dark Engine, да, примерно к этому мой мозг в конце концов и пришёл:))
Mikle, есть один способ избаиться от позднего связывания, использовть ранее связывание. (кстати как это касается темы?)

Ответить

Номер ответа: 27
Автор ответа:
 Mikle



Вопросов: 5
Ответов: 134
 Профиль | | #27 Добавлено: 05.10.12 23:51
кстати как это касается темы?

сколько РАЗНЫХ структур будет в программе?
На данный момент их около двух десятков

Как можно унифицированно обращаться к методам разных структур. Был бы vb.net - помогло бы наследование. В vb6 кроме вариантов с поздним связыванием в голову ничего не приходит. Если взять пример кода в нулевом сообщении - там функция Convert(Struct) получает параметр типа Variant, в результате мы можем передавать в функцию разные структуры, функция заранее тип не знает, позднее связывание. Если сделать параметр конкретно типа UserType, то будет раннее связывание, но не будет смысла - мы этот тип тут же описали, мы и так знаем имена полей структуры, мы их можем сразу вернуть:
  1. Function Convert(Struct As UserType) As String
  2.   Convert = "Field1Field2Field3...Fieldn"
  3. End Function

Да и сама передача параметра теряет смысл - мы его не используем.
В vb.net вместо структур можно применить классы, унаследовав их все от общего MustInherit класса с нужными методами.

Ответить

Номер ответа: 28
Автор ответа:
 Dark Engine



ICQ: 343191665 

Вопросов: 51
Ответов: 98
 Web-сайт: www.wentas.2bb.ru
 Профиль | | #28
Добавлено: 06.10.12 16:28
Mikle пишет:
Как можно унифицированно обращаться к методам разных структур.

Дико извиняюсь, у структур нет методов.

Mikle пишет:
сама передача параметра теряет смысл

В принципе, параметр можно не типизировать и тогда туда можно будет передать что угодно. Так я изначально и планировал делать. Но, к слову, коллекция показала себя вполне достойно. И вот ее передать и с ней же потом работать оказалось очень удачной идеей. Не настолько медленнее структуры она отрабатывает, как я ожидал. А код получилось оптимизировать, за счет чего теперь функционал легко и неограниченно можно расширять.

Ответить

Номер ответа: 29
Автор ответа:
 Mikle



Вопросов: 5
Ответов: 134
 Профиль | | #29 Добавлено: 06.10.12 20:01
у структур нет методов

В vb.net есть. И псевдокод в п.0, если его немного чисто синтаксически, не меняя логики, изменить, выглядит так, как будто методы или свойства имеются.

Ответить

Номер ответа: 30
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #30
Добавлено: 06.10.12 22:03
кстати такое в vb6 прокатит только если UserType описан в tlb
  1. Function Convert(Struct As UserType) As String

Ответить

Страница: 1 | 2 | 3 | 4 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам