если выбирать между коллекцией и классом, что быстрее работает?
коллекция - это встроенный класс
Не надо путать, мы выбираем между структурой и классом, в результате между коллекцией и массивом. В принципе я первый в п.9 внёс путаницу, правильнее было бы так:
Коллекции работают значительно медленнее массивов.
Но:
Классы работают значительно медленнее структур.
Winand, я сначала неправильно понял, мне почему-то казалось, что элементы непременно находятся в массиве, к ним нужно обращаться по индексу, сейчас перечитал, дошло - да, в п.9 я верно написал.
Вопрос получается интересный, сразу нужно разделить, в какой момент требуется быстродействие, требуется ли оно в бОльшей степени для получения информации об имени, или для какой-то другой работы (сортировка, к примеру, нахождение среднего арифметического по какому-то полю). Если получение информации об имени нужно только для показа на форму, то, очевидно, быстродействие этого действия не важно, а если мы регулярно сортируем базу ПО ИМЕНАМ - то очень важно.
Вопрос - сколько РАЗНЫХ структур будет в программе, требуется ли к ним обращаться единообразно, чтобы функции было всё равно, какой тип ей подсунули?
Mikle пишет:
Вопрос - сколько РАЗНЫХ структур будет в программе
На данный момент их около двух десятков. Из них примерно 12 существуют в единственном числе, по 8 (эта цифра точная) остальным создаются массивы (массив структур есть таблица). Из этих 8 три могут (в силу специфики программы) иметь массивы с размерностью свыше десяти тысяч. Планируется ввод еще одной боевой единицы, которую описать структурой будет проблематично (в силу динамичности генерации полей). Коллекция, кстати, для этого подойдет куда лучше. И эта боевая единица тоже будет существовать в массиве, а самих единиц в программе может существовать примерно с десяток.
в некоторой степени оффтоп: долго экспериментировал с сортировкой и в итоге лучшим решением (при хранении данных в объектах) оказалось предварительное кеширование информации по которой идёт сортировка в массив.
Есть N объектов с строковым полем "Name" (например). Перед сортировкой создаём строковый массив из N элементов и копируем в него все значения Name. Затем натравливаем на массив всеми любимый алгоритм quick sort, а по мере сортировки этого массива переставляем соответствующие по индексам объекты. Всё.
Скорость обращения к строке выше скорости обращения к объекту, быстрая сортировка строкового массива и синхронизация с этим процессом процесса перемещений массива объектов... это снижает в разы количество "медленных" обращений (имеющих под собой цель сравнения), оставляя только самые необходимые, а все сравнение делается "быстрыми" обращениями к строкам. Все гениальное просто. Спасибо! Возьму на вооружение.
Dark Engine, ну как, удалось избавиться от позднего связывания? На vb.net, где есть наследование, от этого можно избавиться, на vb6 что-то не представляю как.
Dark Engine, да, примерно к этому мой мозг в конце концов и пришёл)
Mikle, есть один способ избаиться от позднего связывания, использовть ранее связывание. (кстати как это касается темы?)
сколько РАЗНЫХ структур будет в программе?
На данный момент их около двух десятков
Как можно унифицированно обращаться к методам разных структур. Был бы vb.net - помогло бы наследование. В vb6 кроме вариантов с поздним связыванием в голову ничего не приходит. Если взять пример кода в нулевом сообщении - там функция Convert(Struct) получает параметр типа Variant, в результате мы можем передавать в функцию разные структуры, функция заранее тип не знает, позднее связывание. Если сделать параметр конкретно типа UserType, то будет раннее связывание, но не будет смысла - мы этот тип тут же описали, мы и так знаем имена полей структуры, мы их можем сразу вернуть:
Function Convert(Struct As UserType) AsString
Convert = "Field1Field2Field3...Fieldn"
EndFunction
Да и сама передача параметра теряет смысл - мы его не используем.
В vb.net вместо структур можно применить классы, унаследовав их все от общего MustInherit класса с нужными методами.
Mikle пишет:
Как можно унифицированно обращаться к методам разных структур.
Дико извиняюсь, у структур нет методов.
Mikle пишет:
сама передача параметра теряет смысл
В принципе, параметр можно не типизировать и тогда туда можно будет передать что угодно. Так я изначально и планировал делать. Но, к слову, коллекция показала себя вполне достойно. И вот ее передать и с ней же потом работать оказалось очень удачной идеей. Не настолько медленнее структуры она отрабатывает, как я ожидал. А код получилось оптимизировать, за счет чего теперь функционал легко и неограниченно можно расширять.
В vb.net есть. И псевдокод в п.0, если его немного чисто синтаксически, не меняя логики, изменить, выглядит так, как будто методы или свойства имеются.