Announcement

Collapse
No announcement yet.

Unterschiedlicher Speicherauslastung bei selbem Programm

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Unterschiedlicher Speicherauslastung bei selbem Programm

    Hi Leute!

    Mein erstes Thema und zugleich mein erster Beitrag in diesem Forum.
    Ich hoffe ich mache alles richtig.

    Also ich ein Programm geschrieben, das eine Map zu einem Browsergame namens "Die Stämme" erstellt. Die Map ist ein 1000x1000px großer Bitmap.
    Die Daten liegen in textform vor. Jede Zeile steht für ein Dorf auf der Map.
    Diese Textdatei lese ich nun zeilenweise aus und mach ein Object mit einer von mir gefertigten Klasse. Diese Objecte speichere ich in in DIctionary(Of integer (Dorfid), dorf as clsDorf).
    Ausser den Dörfer liegen noch weitere 2 Textdateien vor. Für Spieler und Stämme.
    Das Einlesen ist die selbe Prozedur wie bei den Dörfern.

    Nun aber zu meinem eigentlichen Problem: Wie kann es sein, dass auf einem Rechner mit xp insgesamt ca. 80mb ram belegt werden und auf meinem Notebook mit vista nur ca. knapp 60 mb belegt werden? Das Programm ist absolut identisch und die Textdateien auch.

    Hier der Source:

    Einleseroutinen:
    Code:
     Private Function load_villages(ByVal server As String)
            Dim strmReader As StreamReader
            Dim villages As New List(Of clsDorf)
            Dim act_vil As String
            Dim act_vil_info(6) As String
            Dim village As clsDorf
            Dim ers As Integer = 0
            villages.Add(New clsDorf(-1, "Feld", 0, 0, 0, 0))
            strmReader = New StreamReader(data_str & "\" & My.Settings.server & "\villages.txt", True)
            Dim vils_read As Integer = 0
            While (strmReader.EndOfStream = False)
                Try
                    act_vil = strmReader.ReadLine
                    act_vil_info = act_vil.Split(",")
                    village = New clsDorf(act_vil_info(0), act_vil_info(1), act_vil_info(2), act_vil_info(3), act_vil_info(4), act_vil_info(5))
                    villages.Add(village)
    
                    vils_read += 1
                Catch ex As Exception
                    'MsgBox(ex.Message, MsgBoxStyle.Information, "Fehler beim Einlesen der Dörfer")
                    ers += 1
                End Try
            End While
            strmReader.Close()
            Return villages
        End Function
    
        Private Function load_allys(ByVal server As String)
            Dim strmReader As StreamReader
            Dim allys As New List(Of clsStamm)
            Dim act_al As String
            Dim act_al_info(8) As String
            Dim stamm As clsStamm
            Dim ers As Integer = 0
            stamm = New clsStamm(0, "kein Stamm", "kein Stamm", 0, 0, 0, 0, 0)
            allys.Add(stamm)
            strmReader = New StreamReader(data_str & "\" & My.Settings.server & "\ally.txt", True)
    
            While (strmReader.EndOfStream = False)
                Try
                    act_al = strmReader.ReadLine
                    act_al_info = act_al.Split(",")
                    stamm = New clsStamm(act_al_info(0), act_al_info(1), act_al_info(2), act_al_info(3), act_al_info(4), act_al_info(5), act_al_info(6), act_al_info(7))
                    allys.Add(stamm)
                Catch ex As InvalidCastException
                    'MsgBox(ex.Message, MsgBoxStyle.Information, "Fehler beim Einlesen der Stämme")
                    ers += 1
                End Try
            End While
    
            strmReader.Close()
            Return allys
        End Function
     
        Private Function load_player(ByVal server As String)
            Dim strmReader As StreamReader
            Dim players As New List(Of clsPlayer)
            Dim act_pl As String
            Dim act_pl_info(6) As String
            Dim player As clsPlayer
            Dim ers As Integer
            player = New clsPlayer(0, "verlassen", 0, 0, 0, 0)
            players.Add(player)
            strmReader = New StreamReader(data_str & "\" & My.Settings.server & "\tribe.txt", True)
    
            While (strmReader.EndOfStream = False)
                Try
                    act_pl = strmReader.ReadLine
                    act_pl_info = act_pl.Split(",")
                    player = New clsPlayer(act_pl_info(0), act_pl_info(1), act_pl_info(2), act_pl_info(3), act_pl_info(4), act_pl_info(5))
                    players.Add(player)
                Catch ex As Exception
                    ers += 1
                End Try
            End While
    
            strmReader.Close()
            Return players
        End Function

    Dorf-/Stamm- und Spielerklassen:
    Code:
    Public Class clsDorf
        Public x As Integer
        Public y As Integer
        Public id As Integer
        Public name As String
        Public pts As Integer
        Public tribe As Integer
        Public ally As Integer
    
        Public Sub New(ByVal id As Integer, ByVal name As String, ByVal x As Integer, ByVal y As Integer, ByVal tribe As Integer, ByVal pts As Integer)
            Me.x = x
            Me.y = y
            Me.id = id
            Me.name = System.Web.HttpUtility.UrlDecode(name)
            Me.pts = pts
            Me.tribe = tribe
        End Sub
        Public Overrides Function ToString() As String
            Return Me.name
        End Function
    
    End Class
    
    Public Class clsStamm
        Public id As Integer
        Public name As String
        Public tag As String
        Public members As Integer
        Public villages As Integer
        Public points As Integer
        Public all_points As Integer
        Public rank As Integer
        Public player As New List(Of Integer)
    
    
    
        Public Sub New(ByVal id As Integer, ByVal name As String, ByVal tag As String, ByVal members As Integer, ByVal villages As Integer, ByVal points As Integer, ByVal all_points As Integer, ByVal rank As Integer)
            Me.id = id
            Me.name = System.Web.HttpUtility.UrlDecode(name)
            Me.tag = System.Web.HttpUtility.UrlDecode(tag)
            Me.members = members
            Me.villages = villages
            Me.points = points
            Me.all_points = all_points
            Me.rank = rank
    
        End Sub
    
        Public Overrides Function ToString() As String
            Return Me.tag
        End Function
    
    End Class
    
    Public Class clsPlayer
    
        Public id As Integer
        Public name As String
        Public ally As Integer
        Public villages As Integer
        Public pts As Integer
        Public rank As Integer
        Public doerfer As List(Of Integer)
    
    
        Public Sub New(ByVal id As Integer, ByVal name As String, ByVal ally As Integer, ByVal villages As Integer, ByVal pts As Integer, ByVal rank As Integer)
            Me.id = id
            Me.name = System.Web.HttpUtility.UrlDecode(name)
            Me.ally = ally
            Me.villages = villages
            Me.pts = pts
            Me.rank = rank
            Me.doerfer = New List(Of Integer)
    
        End Sub
    
        Public Overrides Function ToString() As String
            Return Me.name
        End Function
    
    End Class
    SetData Methode der Mapklasse: (Dieser Klasse werden die Listen der Einleseroutinen übergeben)

    Code:
    Public Sub SetData(ByVal villages As List(Of clsDorf), ByVal tribes As List(Of clsPlayer), ByVal allys As List(Of clsStamm))
    
            ReDim vils_kords(999, 999)
    
            frmMap.cmbMapInfoAllys.Items.Clear()
            frmMap.cmbMapInfoPlayers.Items.Clear()
            frmMap.cmbMapInfoVillages.Items.Clear()
    
            For x As Integer = 0 To 999
                For y As Integer = 0 To 999
                    vils_kords(x, y) = -1
                Next
            Next
    
            For i As Integer = 0 To allys.Count - 1
                allys_id.Add(allys.Item(i).id, allys.Item(i))
                frmMap.cmbMapInfoAllys.Items.Add(allys.Item(i))
            Next
    
    
            For i As Integer = 0 To tribes.Count - 1
                Me.tribes_id.Add(tribes.Item(i).id, tribes.Item(i))
                Me.allys_id.Item(tribes.Item(i).ally).player.Add(tribes.Item(i).id)
            Next
    
            For i As Integer = 0 To villages.Count - 1
                vils_kords(villages.Item(i).x, villages.Item(i).y) = villages.Item(i).id
                If (villages.Item(i).tribe > -1) Then
                    Try
    
                        Me.villages_id.Add(villages.Item(i).id, villages.Item(i))
                        Me.villages_id(villages.Item(i).id).ally = Me.tribes_id(villages.Item(i).tribe).ally
                        Me.tribes_id(villages.Item(i).tribe).doerfer.Add(villages.Item(i).id)
                        'Me.tribes_id().Item(Me.tribes_id(Me.villages.Item(i).tribe)).doerfer.Add(Me.villages.Item(i).id)
                    Catch ex As KeyNotFoundException
    
                    End Try
                End If
            Next
    
            frmMap.cmbMapInfoAllys.SelectedIndex = 0
    
            frmMap.lblInfosAllys.Text = "Insgesamt " & allys.Count & " Stämme"
            frmMap.lblInfosTribes.Text = "Insgesamt " & tribes.Count & " Spieler"
            frmMap.lblInfosVillages.Text = "Insgesamt " & villages.Count & " Dörfer"
        End Sub
    so das sind die wichtigsten Codeausschnitte. Optimal wär natürlich noch, wenn ihr mir sagen könntet wie ich die Speicherauslastung noch mehr senke.

    btw. Ich weiß nicht ob es in den geposteten Auschnitten vorkommt, aber Player = Tribe = Spieler und Ally = Stamm und Village = Dorf. Konnte mich einfach nicht für einen Namen entscheiden.
    btw2. ich bin noch ein ziemlicher Noob in Vb.net.

    Auf Hilfe hoffend,
    DaHaiz

  • #2
    Bedenke das je nach Installationszustand von Windows nicht nur deine Programmcode im Prozessraum vorhanden ist sondern auch von diversen Programmen DLL's in deinen Adressraum geladen werden und zum Speicherverbrauch dazu zählen.

    Comment


    • #3
      Danke. Damit wär ein Problem geklärt. Kannst du/Könnt ihr mir evtl. noch Tips geben, wie ich die Speicherauslastung noch senken kann?

      Comment

      Working...
      X