|
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
|
|
| 18.03.2010, 09:57 | |
|
Ответы с готовыми решениями:
9
Что лучше: 1 цикл и много действий или много циклов и 1 действие? Что лучше - много строк или много колонок? Что лучше: один логин или много |
|
Comanche
|
|
| 18.03.2010, 10:33 | |
|
Примеры функций?
Есть ли у них градация по назначению или ещё какая? Или это 'ActiveX-библиотека для работы со всем, с чем только можно'? |
|
|
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
|
||||||
| 18.03.2010, 14:12 [ТС] | ||||||
|
Да, именно так, 'для работы со всем, с чем только можно'
)Но сгруппировать методы логически под классы можно по множеству признаков (приводить их здесь не имеет смысла), да и не в этом суть, это мои трудности и знаю как их решить. Надо ли это делать? Вот вопрос! Принесет ли это пользу? Созерцать в Project Group дерево классов длинной в несколько экранов очень тоскливо , но не это меня волнует а именно производительность, хотя 'пока' и не тормозит. Так же интересно какая dll памяти займет меньше, один класс со ста методами (или, скажем 3 класса по 30 методов )) или сто классов по одному методу? Пример целого класса, и таких половина:
.Нет, в .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
|
|
|
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
|
|
|
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 допускают обращение к элементам без создания объекта, а просто вызовом его методов. Правда, и освобождение этого объекта произойдет после завершения работы, т.е. нет возможности управлять временем жизни этого объекта. Но может это и нужно. |
|
| 21.03.2010, 14:41 | |
|
Помогаю со студенческими работами здесь
10
Что лучше когда Директа много или мало на сайте? Что лучше?Купить много ссылок с любых сайтов или много маленьких картинок + фон под ними, верстка -блочная. Что лучше использовать table или дивы? Генератор всей информации на много Yetabayte или много битный счетчик или ЗУ с неограниченным размером Слишком много аргументов в вызове функции, или как создать много файлов на рабочем столе? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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 секунды (а то и больше),. . .
|