Domanda

Ho un'app WinForms che si affida a diverse biblioteche su cui ho un controllo limitato, come moduli.Images e formes.Webbrowser. Le perdite di memoria improvvise sporadiche causano l'arresto anomalo della mia applicazione. Queste non sono perdite di memoria over-time che si accumulano. Sono casuali, spesso diverse eccezioni del com e sono impossibili da prevedere - a volte accadono dopo un'ora, a volte dopo un giorno.

La mia attuale metodologia per almeno temporaneamente il problema è di avere un'altra applicazione verificare che il primo sia in esecuzione utilizzando GetProcessyByName (). Tuttavia, questo è problematico perché il processo in corso a volte si blocca ma non si chiude. Ho solo un messaggio Wer (nonostante il fatto che Wer sia disattivato sul computer). Ciò che è peggio è che quando il primo processo si blocca e la perdita di memoria si accumula, anche la seconda applicazione di controllo del processo si blocca anche. E poi nulla funziona fino a riavviare manualmente l'intero Shabang.

1) Qualcuno conosce un modo efficace per elaborare un controllo se il processo B è in esecuzione senza avere il processo A sottoposto a problemi di memoria che effettuano il processo B Crash?

2) Se il precedente non è possibile, o troppo difficile, qualcuno conosce alcun buon utensile di terze parti che può essere utilizzato per garantire che i processi siano in esecuzione senza errori Wer in circolazione, che si riavviano i processi se vengono rilevati errori Wer, E questo può resistere al massimo RAM?

Grazie!

È stato utile?

Soluzione

Invece di cercare di aggirare il problema, dovresti provare a risolverlo prima.

Se si utilizzano perdite di memoria di esperienza durante l'utilizzo di risorse non gestite, direi invece di ignorare quelle eccezioni lanciate da voi componenti COM, cattura, quindi smaltire e reinizializzare se non è possibile la capire che cosa sta causando loro.

Accanto a quello, sembra che il tuo processo non si schiantasse, ma piuttosto non è più reattivo.Vedi Processo.Rispondere .O monitorare l'utilizzo della memoria e ucciderlo quando supera un determinato limite Process.WorkingSet64

Altri suggerimenti

Normalmente userei Pskill per uccidere il processo dalla riga di comando.Non c'è molto bisogno di scrivere un servizio .NET per farlo.

Comunque il fatto che l'app presumibilmente piccola e semplice di controllo del processo è in errore ci porterebbe a credere che ci sia qualcosa di sbagliato nel sistema effettivo in questione.

Pslist &PSKLL

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top