vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Speicherfreigabe mit DISPOSE 
Autor: SusanneM
Datum: 26.02.08 09:36

Hallo,

habe eine simple Windows-API erstellt, über die man Bilder aus einer Datei auswählen kann.
Mein Problem an der ganzen Sache ist, dass diese API vom Speicherplatz immer größer wird, was man sieht wenn man parallel zum Programm den Task-Manager öffnet. Da werden aus 11.000 K auch mal ganz schnell 56.000 K. Die API frisst einfach weiter Ressourcen, egal ob ich nochmal den OK-Button auf meiner Form betätige oder nur das ganze Fenster verschiebe. Wie kann man das unterbinden?
Habe mal im Internet gesucht und die DISPOSE-Methode bei MSDN gefunden. da gibt es sogar einen Bespielcode dazu (http://msdn2.microsoft.com/de-de/library/fs2xkftw(VS.80).aspx). Den habe ich auch bei mir eingebaut. Aber es funktioniert einfach nicht. Ich verstehe einfach nicht, wie ich dieses Codebespiel so bei mir einsetzten muss, dass es auch funktioniert und hoffe einfach das einer von Euch mir vielleicht weiterhelfen könnte. Das wäre wirklich toll!
VIELEN DANK SCHONMAL IM VORAUS FÜR EURE HILFE!!!

Zum besseren Verständis packe ich noch meinen Code hier rein:
 
 
Public Class Form1
 
 
  Public Class MyResource
    Implements IDisposable
 
    Private handle As IntPtr
 
    Private component As Component
 
    Private disposed As Boolean = False
 
    ' The class constructor.
    Public Sub New(ByVal handle As IntPtr)
      Me.handle = handle
    End Sub
 
 
    Public Overloads Sub Dispose() Implements IDisposable.Dispose
      Dispose(True)
 
      GC.SuppressFinalize(Me)
    End Sub
 
 
    Private Overloads Sub Dispose(ByVal disposing As Boolean)
 
      If Not Me.disposed Then
 
        If disposing Then
          ' Dispose managed resources.
          component.Dispose()
        End If
 
 
        CloseHandle(handle)
        handle = IntPtr.Zero
      End If
      disposed = True
    End Sub
 
 
    <System.Runtime.InteropServices.DllImport("Kernel32")> _
    Private Shared Function CloseHandle(ByVal handle As IntPtr) As [Boolean]
    End Function
 
 
    Protected Overrides Sub Finalize()
 
      Dispose(False)
      MyBase.Finalize()
    End Sub
  End Class
 
  Public Shared Sub Main()
    ' Insert code here to create
    ' and use the MyResource object.
 
  End Sub
 
  'End Class
  Private Sub MyBase_Load(ByVal sender As System.Object, ByVal e As _
    System.EventArgs) Handles MyBase.Load
    ButtonOK.Enabled = True
  End Sub
  Private Sub ButtonOK_Click(ByVal sender As System.Object, ByVal e As _
    System.EventArgs) Handles ButtonOK.Click
    GetImage()
  End Sub
  Private Sub ButtonCancel_Click(ByVal sender As System.Object, ByVal e As _
    System.EventArgs) Handles ButtonCancel.Click
    Me.Close()
  End Sub
  Private Sub ButtonPictureSelect_Click(ByVal sender As System.Object, ByVal e _
    As System.EventArgs) Handles ButtonPictureSelect.Click
    Dim OFD As New OpenFileDialog()
    OFD.CheckFileExists = True
    OFD.CheckPathExists = True
    OFD.Filter = _
      "Bilddateien|*.GIF;*.JPG;*.JPEG;*.PCD;*.PSP;*.PNG;*.TIF;*.TIFF;*.BMP;*PC" & _
      "|Alle Dateien (*.*)|*.*"
    OFD.InitialDirectory = "C:\WPProjects\EMS\WPProjectImages"
    OFD.Multiselect = False
    OFD.Title = "Bitte wählen Sie ein Bild aus."
    If OFD.ShowDialog() = Windows.Forms.DialogResult.OK Then
      TextBoxImageUrl.Text = OFD.FileName
      GetImage()
    End If
  End Sub
  Private Sub GetImage()
 
    If Panel1.Controls.Count > 0 Then
      Panel1.Controls(0).Dispose()
      'Dispose(True)
    End If
 
    Dim PictureBoxPicture As New PictureBox
    PictureBoxPicture.Location = New Point(0, 0)
    PictureBoxPicture.Width = 424
    PictureBoxPicture.Height = 127
 
        Dim lc As Point
        lc.X = Fix((Panel1.Width) / 2 - (PictureBoxPicture.Width / 2))
        lc.Y = Fix((Panel1.Height) / 2 - (PictureBoxPicture.Height / 2))
        PictureBoxPicture.Location = lc
        PictureBoxPicture.SizeMode = PictureBoxSizeMode.Zoom
      Else
        PictureBoxPicture.Width = 0
        PictureBoxPicture.Height = 0
      End If
    End If
    Panel1.Controls.Add(PictureBoxPicture)
    PictureBoxPicture.Refresh()
 
  End Sub
 
End Class
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Speicherfreigabe mit DISPOSE5.100SusanneM26.02.08 09:36
Re: Speicherfreigabe mit DISPOSE2.018Melkor26.02.08 11:22
Re: Speicherfreigabe mit DISPOSE1.830SusanneM26.02.08 11:53
Re: Speicherfreigabe mit DISPOSE1.766Melkor26.02.08 12:15
Re: Speicherfreigabe mit DISPOSE1.780ModeratorFZelle26.02.08 17:32
Re: Speicherfreigabe mit DISPOSE1.649SusanneM27.02.08 09:03
Re: Speicherfreigabe mit DISPOSE1.676ModeratorFZelle27.02.08 09:25

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel