Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173

Много методов или много классов. Что лучше?

18.03.2010, 09:57. Показов 2758. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется библиотека(ActiveX DLL), в которую, в своё время, было решено складировать функции, вызваемые извне(точнее, основным модулем). Функции там лежат по принципу: класс с одним-двумя методами. Проблема в том, что количество классов уже перевалило за стольник, а планируется еще больше, при этом размер методов варьируется от десятка строк до нескольких тысяч (не знаю, имеет ли это значение, на всяк пожар...). Вызов происходит так (во внешнем модуле):
Set clsVarName= CreateObject('')
CallBYName(...)
Set clsVarName=Nothing
При этом одновременно может существовать только один экземпляр одного единственного класса из этой библиотеки, это обеспечивается самим механизмом вызова.

Вопрос мой в следующем.
Как лучше организовать методы? СтОит ли все методы положить в один класс или оставить все как есть? Есть ли здесь возможность для оптимизации по отношению к скорости выполнения и к занимаемым ресурсам?
Я-то слабо себе представляю весь механизм, как я знаю ведь при 'Set New' класса из dll, в память запихивается вся dll, а потом при 'Set nothing' выпихивается... туда-сюда, туда-сюда...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.03.2010, 09:57
Ответы с готовыми решениями:

Что лучше: 1 цикл и много действий или много циклов и 1 действие?
Есть n количество данных. Есть m количество действий. Задание надо выполнить m действий с каждой единицей данных n. По сути решения 2: 1)...

Что лучше - много строк или много колонок?
Не могу определиться как лучше хранить сводную таблицу. Задача такая: Есть таблица накопления продаж товара: Item_ID, DateSale,...

Что лучше: один логин или много
Всем привет. Ситуация такая. Есть mssql 2012 server. К нему подсоединяюсь через linq-to-sql. Предполагается, что программа будет...

9
Comanche
18.03.2010, 10:33
Примеры функций?
Есть ли у них градация по назначению или ещё какая? Или это 'ActiveX-библиотека для работы со всем, с чем только можно'?
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
18.03.2010, 14:12  [ТС]
Да, именно так, 'для работы со всем, с чем только можно' )
Но сгруппировать методы логически под классы можно по множеству признаков (приводить их здесь не имеет смысла), да и не в этом суть, это мои трудности и знаю как их решить.
Надо ли это делать? Вот вопрос!
Принесет ли это пользу? Созерцать в Project Group дерево классов длинной в несколько экранов очень тоскливо, но не это меня волнует а именно производительность, хотя 'пока' и не тормозит. Так же интересно какая dll памяти займет меньше, один класс со ста методами (или, скажем 3 класса по 30 методов)) или сто классов по одному методу?

Пример целого класса, и таких половина:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Option Explicit
 
Public Function SomeNameFunction(a_Control As Control) As String
  Dim ControlValue As String
  
  If Not IsNull(a_Control.Value) Then
    ControlValue = a_Control.Value
    If Len(ControlValue) = 8 Then 
      SomeNameFunction = '1'
    ElseIf Len(ControlValue) = 5 Then
      SomeNameFunction = '2'
    Else
      SomeNameFunction = '0'
    End If
  Else
      SomeNameFunction = '0'
  End If
  
End Function
Не ломайте голову, что она делает, пример реальный, только имена я заменил, чтобы не пудрить вам мозги предметной областью .

Нет, в .exe эту функцию нельзя положить.
0
Messir
19.03.2010, 14:34
Что касается занимаемой памяти, то разница будет несущественная - хоть по 30 в три класса, хоть все 100 - в один класс.
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
21.03.2010, 08:53  [ТС]
Спасибо. А по скорости работы (выполнение Set New, только это сейчас меня беспокоит) разница будет?
0
pl
51 / 17 / 6
Регистрация: 18.05.2007
Сообщений: 1,322
21.03.2010, 09:14
Будет, в одной программе мне пришлось отказаться от использования внутри функции создания локального объекта и сделать его глобальным (функция вызывалась в цикле), производительность увеличилась почти в два раза (VB 6).
0
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
21.03.2010, 09:39  [ТС]
К сожалению я не могу так сделать, иначе бы и не спрашивал, просто сделал бы один класс, положил бы в него все методы и при старте приложения создавал бы один экземпляр. Но не могу я так делать.
Приложение работает (и будет работать) именно так как описано в первом посте. То есть .exe непосредственно(!) перед вызовом 'знает' имя dll, имя класса, имя метода. Всё это запускается, потом класс убивается. Сделать по другому - невозможно (я же не один тружусь).
А вот будет ли столь заметна разница при CreateObject класса с одним методом и класса с большИм кол-вом методов. (Разница-то конечно будет, нутром чую ). И не будет ли влиять на скорость выполнения CreateObject размер самой dll и количество классов в ней?
0
pl
51 / 17 / 6
Регистрация: 18.05.2007
Сообщений: 1,322
21.03.2010, 10:56
Да сделай ты тест с двумя крайними способами и проверь, если разницы не обнаружишь то и голову не ломай.
0
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
21.03.2010, 11:18  [ТС]
Чёй-то мне это в голову не приходило , наверное из-за лени.
Попробую...

PS: Думал, может кто знает, пробовал или книжки умные читал.
0
Vita
21.03.2010, 14:41
Есть такое предположение (времени нет проверять досконально).

Сервер с 100 объектами (Сервер100) с одним методом будет занимать больше места чем 1 объект (Сервер1) со 100 методами. Это вытекает из того факта, что 100 объектов трубует больше места именно для своего описания. Если подробно, то для своей TLB-библиотеки, той, что используется Просмотрщиком Объектов. А код функций как бинарный код процессору будут примерно одинаков для обоих варианта.

Также есть такое свойство у класса как Instancing. Значение GlobalMultiUse допускают обращение к элементам без создания объекта, а просто вызовом его методов. Правда, и освобождение этого объекта произойдет после завершения работы, т.е. нет возможности управлять временем жизни этого объекта. Но может это и нужно.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.03.2010, 14:41
Помогаю со студенческими работами здесь

Что лучше когда Директа много или мало на сайте?
Недавно зарегился в Директе, т.к. Бегун достал своими loveplanet, по тематике мало крутит (все установлено правильно). Так вот неделю...

Что лучше?Купить много ссылок с любых сайтов или
мучает меня вопрос. Что лучше купить много ссылок с любых сайтов и страниц.При условии что анкоры сделаны хорошо.Или на теже деньги...

много маленьких картинок + фон под ними, верстка -блочная. Что лучше использовать table или дивы?
Здравствуйте уважаемые форумчане! Помогите, пожалуйста, новичку решить вопрос. Ситуация такая: есть страница с блочной версткой ...

Генератор всей информации на много Yetabayte или много битный счетчик или ЗУ с неограниченным размером
Вопрос как получить всю информацию все изображения и.т.д ? Ответ прост весь код файла это номер двоичный или десятичный или HEX 1.нужно...

Слишком много аргументов в вызове функции, или как создать много файлов на рабочем столе?
Мне нужно создать на рабочем столе очень много файлов вот команда для создания 1 файла wchar_t szBuf{ 0 }; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru