Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1224to1228
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

class vx type

class vx type
Thomas
Servus zusammen
hatte heute zum ersten Mal eine echt gute Situation, in der ich eine Klasse dem Type vorgezogen hätte
Type/Class mit 5 Strings, 2 doubles und einem booleschen Wert
Die Klasse hätte mindestens drei Routinen implementiert gehabt
Bei der Type-Variante hatte ich die Routinen als Subs bzw Funktionen sonst wo im Projekt
Nun brauch ich ein Array von eventuell bis zu 1500 Elementen (evtl. auch mehr)
Mit der TypeVariante war ein Array mit 1200 Elementen kein Problem
bei der Class - Variante stieg mir VBA mit zu wenig Stack aus, obwohl ich für einen Test nur maximal 100 Elemente hatte
Benötigt die Klasse im Vergleich zum Type so viel mehr Speicher, verwaltet die ihn anders oder muß ich irgendwo nach Schadcode auf die Suche gehn? Irgendwelche Tips für Standardfehler?
ich nutze in beiden Variante ein redim preserve, ich hoffe, das geht bei Klassen auch (die hinzugekommenen Elemente initialisiere ich neu mit set .... )
Thomas

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: class vx type
04.08.2011 18:23:18
Josef

Hallo Thomas,
ein einfaches Beispiel.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Dim myClassArray As clsArray

Sub setValues()
  Dim lngIndex As Long
  
  Set myClassArray = New clsArray
  
  For lngIndex = 1 To 10000
    myClassArray.newValue = lngIndex
  Next
End Sub


Sub readValues()
  Dim lngIndex As Long
  
  If Not myClassArray Is Nothing Then
    For lngIndex = 0 To myClassArray.Count - 1
      Debug.Print myClassArray.getValue(lngIndex)
    Next
  End If
  
End Sub


' **********************************************************************
' Modul: clsArray Typ: Klassenmodul
' **********************************************************************

Option Explicit

Private m_Array() As Variant
Private m_Index As Long

Public Property Let newValue(Value As Variant)
  Redim Preserve m_Array(m_Index)
  m_Array(UBound(m_Array)) = Value
  m_Index = m_Index + 1
End Property


Public Property Get getValue(ByVal Index As Long) As Variant
  getValue = m_Array(Index)
End Property


Public Property Get Count() As Long
  Count = UBound(m_Array) + 1
End Property



« Gruß Sepp »

Anzeige
AW: class vx type
04.08.2011 21:59:43
Thomas
Danke
Aber kann ich von den zwei Arten irgendwie den Speicherverbrauch ermitteln?
Ich mein, ok, beim Type einfach die Größe der einzelnen Datentypen zusammenzählen
Aber brauch die Class irgendwie mehr?
Bei Java oder C, glaub ich, gibts ja nen Sizeof....
Thomas
AW: class vx type
04.08.2011 23:35:03
Nepumuk
Hallo,
da hast du irgendwas falsch gemacht. Ich hab zum Spaß mal 2.000.000 Datensätze in eine Klasse mit zwei Strings die sich selbst in einer Collection, welche die Klasse enthält, verpacken. Hat den Vorteil das du einzelen Einträge rauslöschen oder an einer x-belibigen Stelle einfügen kannst. Außerdem kannst du, wenn du weißt wie es geht, mit For Each durch das Array laufen was ja ein einem benutzerdefinietem Type nicht geht.
Die Strings, einmal 5 einmal 10 Zeichen = 15 + 2*10 Byte (für den String-Type) = 35 Byte. Eine Instanz der Klasse benötigt 88 Byte, also zusätzlich 53 Byte für die Klasse.
88 Byte * 2.000.000 = 176.000.000 Byte = 171.875 KB ~ 167 MB. Zur Verfügung stehen 512 MB. Also gut und gerne 5 - 6 Millionen Stück dieser Klasse.
Gruß
Nepumuk
Anzeige
AW: class vx type
05.08.2011 18:09:03
Thomas
Hast recht, dann läuft bei mir was schief....
Danke
Thomas

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige