Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
t-80
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
#1

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

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

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

Вопрос мой в следующем.
Как лучше организовать методы? СтОит ли все методы положить в один класс или оставить все как есть? Есть ли здесь возможность для оптимизации по отношению к скорости выполнения и к занимаемым ресурсам?
Я-то слабо себе представляю весь механизм, как я знаю ведь при 'Set New' класса из dll, в память запихивается вся dll, а потом при 'Set nothing' выпихивается... туда-сюда, туда-сюда...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2010, 09:57
Ответы с готовыми решениями:

Что лучше VB6 или VB .NET?
Здравствуйте. Выбрал язык vb, как единственный язык для простого решения моих...

В Recordset слишком много fields
Recordset с большим количеством fields .На форме поместить в datagrid''e не...

Программа есть много памяти..
Программа пожирает память. Ну простейшая прога! Ну совсем! Каждые 7 секунд...

Что лучше Visual Basic или Blitzbasic
Что лучше Visual Basic или Blitzbasic?Если можно комнемтируем!!!

Что лучше применять DAO или ADO?
старая база ведется под Win98 надо сделать к ней запросы. Что лучше применять...

9
Comanche
18.03.2010, 10:33 #2
Примеры функций?
Есть ли у них градация по назначению или ещё какая? Или это 'ActiveX-библиотека для работы со всем, с чем только можно'?
t-80
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
18.03.2010, 14:12  [ТС] #3
Да, именно так, 'для работы со всем, с чем только можно' )
Но сгруппировать методы логически под классы можно по множеству признаков (приводить их здесь не имеет смысла), да и не в этом суть, это мои трудности и знаю как их решить.
Надо ли это делать? Вот вопрос!
Принесет ли это пользу? Созерцать в 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 #4
Что касается занимаемой памяти, то разница будет несущественная - хоть по 30 в три класса, хоть все 100 - в один класс.
t-80
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
21.03.2010, 08:53  [ТС] #5
Спасибо. А по скорости работы (выполнение Set New, только это сейчас меня беспокоит) разница будет?
0
pl
51 / 17 / 6
Регистрация: 18.05.2007
Сообщений: 1,322
21.03.2010, 09:14 #6
Будет, в одной программе мне пришлось отказаться от использования внутри функции создания локального объекта и сделать его глобальным (функция вызывалась в цикле), производительность увеличилась почти в два раза (VB 6).
0
t-80
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
21.03.2010, 09:39  [ТС] #7
К сожалению я не могу так сделать, иначе бы и не спрашивал, просто сделал бы один класс, положил бы в него все методы и при старте приложения создавал бы один экземпляр. Но не могу я так делать.
Приложение работает (и будет работать) именно так как описано в первом посте. То есть .exe непосредственно(!) перед вызовом 'знает' имя dll, имя класса, имя метода. Всё это запускается, потом класс убивается. Сделать по другому - невозможно (я же не один тружусь).
А вот будет ли столь заметна разница при CreateObject класса с одним методом и класса с большИм кол-вом методов. (Разница-то конечно будет, нутром чую ). И не будет ли влиять на скорость выполнения CreateObject размер самой dll и количество классов в ней?
0
pl
51 / 17 / 6
Регистрация: 18.05.2007
Сообщений: 1,322
21.03.2010, 10:56 #8
Да сделай ты тест с двумя крайними способами и проверь, если разницы не обнаружишь то и голову не ломай.
0
t-80
0 / 0 / 1
Регистрация: 19.10.2008
Сообщений: 173
21.03.2010, 11:18  [ТС] #9
Чёй-то мне это в голову не приходило , наверное из-за лени.
Попробую...

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

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

Также есть такое свойство у класса как Instancing. Значение GlobalMultiUse допускают обращение к элементам без создания объекта, а просто вызовом его методов. Правда, и освобождение этого объекта произойдет после завершения работы, т.е. нет возможности управлять временем жизни этого объекта. Но может это и нужно.
21.03.2010, 14:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2010, 14:41

Много форм в проекте: как их убивать?
Допустим у меня в проекте 3 формы, первая само сабой и остальные. Существует ли...

WaitMessage PeekMessage поедают много ресурсов.
Когда я использую ети функции в цыкле они поедают много ресурсов, как получать...

Где можно найти много .ocx и .dll
спасибо


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru