Как правильно оптимизировать работу с классами?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Fedorfx
Постоялец
Постоялец
 
Сообщения: 371
Зарегистрирован: 10.10.2002 (Чт) 0:14

Как правильно оптимизировать работу с классами?

Сообщение Fedorfx » 14.10.2003 (Вт) 0:48

Есть класс.
В нем 10 массивов по 1-4000 элементов (размер динамический)
В форме обьявлен этот класс.
На форме отображаются графики которые строются по данным из массивов класса.
Текущее решение такое.
В классе есть функции для доступа к элементам массивов типа
1-Function GetOneDataFromMassive1(index as long) as date
GetDataFromMassive1=massive1(index)
End function
2-Function GetAllDataFromMassive1() as Variant
GetAllDataFromMassive1=massive1
End function
Недостатки:
В первом варианте тормоза из за лишних телодвижений из формы в функцию класса.
Во втором - копируется весь массив независимо от нужности тех или иных данных.
В обоих случаях -тормоза.( Все рисуется в реал тайм по 5-10 FPS)
Вопрос - как сделать быстрый доступ к элементам массива класса??
P/S Да и функции доступа к элементам массивов красоты коду не придают.

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Сообщение Dmitriy2003 » 14.10.2003 (Вт) 1:51

Попробуй вместо функций использовать Friend Property, ну да мне кажется большого прироста производительности небудет.
-----------------------------------------------
+Если бы массивы еще фикс. были....
-(да они еще и date типа)

Ну наверное лучше вообще от класса отказатся, всетаки не так просто забыть о модульном программировании. (Вам решать) :idea:
Dmitrich

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 14.10.2003 (Вт) 7:26

Попробуй такой вариант (не знаю насчет повышения быстродействия)

' Class1

Код: Выделить всё
Public aaa As Variant
Public bbb As Variant

Private Sub Class_Initialize()
  ReDim aaa(10) As Long, bbb(10) As Long
End Sub


' Form1

Код: Выделить всё
Private Sub Form_Load()
  Dim x As New Class1
  Me.Caption = x.aaa(0) & x.bbb(0)
End Sub
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

ZeroX
Бывалый
Бывалый
 
Сообщения: 207
Зарегистрирован: 29.04.2003 (Вт) 12:36
Откуда: Мой адрес не дом и не улица, мой адрес Советский Союз

Сообщение ZeroX » 14.10.2003 (Вт) 9:38

Согласен с Dmitriy2003 лучше отказаться от класса и использовать стандартный модуль. Вызов методов из класса занимает больше времени чем вызов аналогичных функций из станд. модуля
ИМХО. А лучше для таких целей написать в библу на сях.
Каждый warning мечтает стать error'om

Fedorfx
Постоялец
Постоялец
 
Сообщения: 371
Зарегистрирован: 10.10.2002 (Чт) 0:14

Сообщение Fedorfx » 14.10.2003 (Вт) 12:04

А как же при модульном программировании создавать копии обьектов.
т.е.
Dim Class1 as new MyClass
.......
Dim Class 99 as new Myclass
А модуль он только один будет?Я идиот! Убейте меня, кто-нибудь!

А про СИ я уже подумыаю - только пока отдельные функции реализую - на Class пока не замахивался.
Собственно вопрос - может кто дать пример класса на Си для использования в VB???( Чтоб там массивы использовались и работа с ними в в VB code)

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Сообщение Dmitriy2003 » 14.10.2003 (Вт) 16:00

Что можно сказать (мысль) если все время создовать екземпляр класса 10 массивами до 4000 элементов Date типа. Эта прога монстр пожирающий память будет. (не очень актуально но всеже тормоза будут преследовать). И потом не совсем понятен каркас программы. Если ты екземпляр класса создал так его ведь инициализировать надо, а данные откуда?. а массив в модуле можно с CopyMemory копировать очень неплохая скорость получается можно сказать от С ничем практ. не отличается.
Dmitrich

Fedorfx
Постоялец
Постоялец
 
Сообщения: 371
Зарегистрирован: 10.10.2002 (Чт) 0:14

Сообщение Fedorfx » 04.11.2003 (Вт) 0:39

Если кому интересно.
Я тут провел сравнение разных методов.
Создавал класс и в нем держал данные разными методами.
Цель - хранить и забрать данные из класса.
Данных 5 000 единиц, тип Double
Самый тормоз Collection
Второй тормоз массив классов в классе, но на порядок быстрее коллекции.
Почти лидер - массив. Но смотря как забирать данные.Если сделать функцию которая возвратит единицу их массива то это быстро но не совсем.
Самое быстрое ->
Public Function GetMassive() as variant
Get massive=massive
End Function
И потом работать с полученным массивом.
Этот метод несмотря на подразумеваемую сложность дает наивысшию скорость.( в 3 порядка быстрее Collection)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот, PetalBot, Yandex-бот и гости: 14

    TopList  
cron