03/09/11 17:14
Roby94
Salve, oggi mi sono trovato a dover sviluppare in c# un applicazione che sfrutta le librerie aforce.video per acquisire immagini da una webcam. Il programma, molto semplice non ha dato particolari problemi finche non mi sono accorto che riempie eccessivamente la ram senza svuotarla, mi spiego meglio, all'avio dell'applicazione essa consuma circa 5mb di ram ma da quando inizia ad acquisire immagini e a visualizzarle in un picurebox il consumo di ram va aumentando di circa 30mb ogni secondo. Ho cercato in rete e dopo aver testato applicazioni simili alla mia mi sono accorto che anche queste presentano lo stesso problema.
Suppongo che quei 30 mb siano dati dalle immagini che vengono inserite nel picturebox e che al cambiare di esso non vengono eliminate dalla memoria, rimanendo come un peso morto in quanto non verranno più utilizzate.
Mi potreste spiegare come eliminare questi dati obsoleti.
Vi incollo le parti principali del codice che ho usato
Grazie in anticipo ^^
Suppongo che quei 30 mb siano dati dalle immagini che vengono inserite nel picturebox e che al cambiare di esso non vengono eliminate dalla memoria, rimanendo come un peso morto in quanto non verranno più utilizzate.
Mi potreste spiegare come eliminare questi dati obsoleti.
Vi incollo le parti principali del codice che ho usato
public partial class FormWebcamFtp : Form { private FilterInfoCollection VideoCaptureDevices; private VideoCaptureDevice FinalVideo = null; public FormWebcamFtp() { InitializeComponent(); VideoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); if (VideoCaptureDevices.Count != 0) { foreach (FilterInfo VideoCaptureDevice in VideoCaptureDevices) { DevicesList.Items.Add(VideoCaptureDevice.Name); } DevicesList.SelectedIndex = 0; try { FinalVideo = new VideoCaptureDevice(VideoCaptureDevices[DevicesList.SelectedIndex].MonikerString); FinalVideo.NewFrame += new NewFrameEventHandler(NewFrame); FinalVideo.Start(); TimerFps.Enabled = true; } catch (Exception ex) { MessageBox.Show("Errore: " + ex); } } else { DevicesList.Items.Add("(Nessun dispositivo video trovato)"); DevicesList.Enabled = false; } } (...) void NewFrame(object sender, NewFrameEventArgs eventArgs) { WebcamFrame.Dispose(); WebcamFrame.Image = (Bitmap)eventArgs.Frame.Clone(); } private void FormWebcamFtp_FormClosed(object sender, FormClosedEventArgs e) { if (FinalVideo != null) { if (FinalVideo.IsRunning) { TimerFps.Enabled = false; FinalVideo.SignalToStop(); FinalVideo = null; } } } (...)
Grazie in anticipo ^^
aaa