Wieviele Strings passen in eine Arraylist?

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von IronStorm.

    Wieviele Strings passen in eine Arraylist?

    Hallo,ich würde gerne einmal wissen wieviele Strings ich in eine Arraylist schreiben kann?
    Ich habe ein Script welches User aus einer Active Directory Gruppe ausliest.Das Problem ist das bei einer Größe ab ca 1500 User die Gruppe immer 0 ausliest. Kleinere Gruppe funktionieren ohne Probleme.
    Gibt es da eventuell Begrenzungen oder liegt das an der AD das diese nicht vernünftig ausgelesen werden können?

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Wo von genau redest du?
    ArrayList ist eine .NET Framework Klasse.
    Erstellst du tatsächlich eine ArrayList:

    Visual Basic-Quellcode

    1. Set myArrayList = CreateObject( "System.Collections.ArrayList" )

    ?
    Zeig dochmal den Code. Ansich passt in ein Array soviel rein wieviel RAM du hast.
    Das ist meine Signatur und sie wird wunderbar sein!
    Na mit x86 nur maximal 2GB an Daten...
    Steht in der Array-Klasse-Hilfe.
    Und "nur" 32 Dimensionen!
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    VB.NET-Quellcode

    1. Public Array As New ArrayList
    2. Public Function LDAP_GetGroups(ByVal obj As String, ByVal sClass As String, ByRef Array As ArrayList) As Integer
    3. nRet = 0
    4. Array.Clear()
    5. Try
    6. Dim ldapRequest = New SearchRequest
    7. ldapRequest.DistinguishedName = mRootDn
    8. ldapRequest.Filter = "(&(objectclass=" & sClass & ")(cn=" & obj.Trim() & "))"
    9. ldapRequest.Scope = System.DirectoryServices.Protocols.SearchScope.Subtree
    10. ldapRequest.Attributes.AddRange(New String() {"Member"})
    11. Dim ldapResponse As SearchResponse = CType(mLdapCon.SendRequest(ldapRequest), SearchResponse)
    12. If (ldapResponse.ResultCode = ResultCode.Success) Then
    13. If (ldapResponse.Entries.Count = 0) Then
    14. nRet = -1
    15. Else
    16. For Each ldapEntry As SearchResultEntry In ldapResponse.Entries()
    17. If Not ldapEntry.Attributes("member") Is Nothing Then
    18. For i As Integer = 0 To ldapEntry.Attributes("member").Count - 1
    19. Array.Add(ldapEntry.Attributes("member")(i).ToString)
    20. Next i
    21. Else
    22. nRet = -2
    23. End If
    24. Next
    25. End If
    26. End If
    27. Catch ex As Exception
    28. nRet = -5
    29. End Try
    30. Return nRet
    31. End Function

    Es gibt keinen wirklich guten Grund eine ArrayList in Vb.net zu verwenden. Verwende eine List(of String)
    Außerdem benenn keine Variable wie ein Schlüsselwort in VB (Array). Außerdem solltest du entweder eine globale Variable verwenden oder einen Parameter übergeben. Eine globale Variable als Parameter zu übergeben ist nicht nötig.
    Das ist meine Signatur und sie wird wunderbar sein!

    IronStorm schrieb:

    Windows Server ... begrenzte Anzahl
    Kannst Du bitte mal das Umfeld dieses Problems mal etwas beschreiben?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Seit einer Weile (Windows Server 2008) bekommst Du bei multiValued Attributwerten nicht mehr alle in einem Rutsch zurück sondern nur eine gewissen Menge (Bytes). Bei Gruppenmitgliedschaften liegt diese Menge bei ca.1200 – ist ein wenig abhängig vom distinguished name. Die Einstellung selber läßt sich auf dem Server (auf den ich keinen Zugriff habe) mit ntdsutil ändern. Wo genau weiß ich leider nicht.