RandomString erstellen ist zu langsam

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Bady.

    RandomString erstellen ist zu langsam

    Hi.
    Ich versuche für meine VM's Virtuelle MacAdressen zu generieren doch leider läuft mir die Prozedur zu schnell ab um vorher eine neue zu generieren.
    Also schreibt er mir teilweise ein paar gleiche untereinander.
    Hat jemand einen Tip?
    Mit Threading.Thread.Sleep(15) gehts zwar aber dann dauert es zu lange bei mehreren.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    2. For i As Integer = 0 To NumericUpDown1.Value - 1
    3. Dim MacString As String = CreateRandomString(6, RandomTextType.LowerCaseLettersMixedNumbers).ToUpper 'CStr(RandomString(6).ToUpper)
    4. Application.DoEvents()
    5. Dim eins As String = MacString.Substring(0, 2)
    6. Dim zwei As String = MacString.Substring(2, 2)
    7. Dim drei As String = MacString.Substring(4, 2)
    8. liste.Add("00:1A:79:" & eins & ":" & zwei & ":" & drei)
    9. Application.DoEvents()
    10. BackgroundWorker1.ReportProgress(i)
    11. Next
    12. End Sub
    13. Public Function CreateRandomString(theLen As Short, art As RandomTextType) As String
    14. Const lowerChars = "abcdefghijklmnopqrstuvwxyz"
    15. Const upperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    16. Const numericChars = "0123456789"
    17. Const specChars = "!§$%&/()=?{[]}+*~#'-_.:,;<>"
    18. Dim rs As String = ""
    19. Dim ast As String = "", le, ix As Short
    20. Dim rnd As New Random()
    21. Select Case art
    22. Case RandomTextType.LowerCaseLetters
    23. ast = lowerChars
    24. Case RandomTextType.UpperCaseLetters
    25. ast = upperChars
    26. Case RandomTextType.LowerCaseLettersMixedNumbers
    27. ast = lowerChars + numericChars
    28. Case RandomTextType.UpperCaseLettersMixedNumbers
    29. ast = upperChars + numericChars
    30. Case RandomTextType.MixedAll
    31. ast = lowerChars + upperChars + numericChars + specChars
    32. End Select
    33. le = ast.Length - 1
    34. For i As Short = 1 To theLen
    35. ix = rnd.Next(0, le)
    36. rs += ast.Substring(ix, 1)
    37. Next
    38. Return rs
    39. End Function
    40. Public Enum RandomTextType
    41. LowerCaseLetters = 1
    42. UpperCaseLetters = 2
    43. LowerCaseLettersMixedNumbers = 3
    44. UpperCaseLettersMixedNumbers = 4
    45. MixedAll = 5
    46. End Enum


    Danke im voraus.
    LG
    GOOGLE ist mein Meister :)
    @Bady

    Hab hier ein rudimentäres Beispiel, Ohne deine Auswahl.

    Die Instanz der Random würde ich Klassenweit deklarieren, so sollten auch keine gleichen Werte entstehen.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Public Module MacAddressRandom
    4. Public ReadOnly Rand As Random = New Random
    5. Public Sub Main()
    6. Dim size = 10
    7. Dim macsize = 3
    8. Dim startmac = "00:1A:79:"
    9. Dim rngmacaddress = New String(size - 1) {}
    10. Dim rngmac = RngMacSubAddress(size, macsize)
    11. For i = 0 To size - 1
    12. rngmacaddress(i) = $"{startmac}{String.Join(":", rngmac(i).Select(Function(x) x.ToString("x2")))}"
    13. Console.WriteLine(rngmacaddress(i))
    14. Next
    15. Console.ReadLine()
    16. End Sub
    17. Private Function RngMacSubAddress(size As Int32, macsize As Int32) As Byte()()
    18. Dim result = New Byte(size - 1)() {}
    19. For i = 0 To size - 1
    20. result(i) = New Byte(macsize - 1) {}
    21. Rand.NextBytes(result(i))
    22. Next
    23. Return result
    24. End Function
    25. End Module



    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()