Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Thread e SQL
domenica 08 giugno 2014 - 17.04
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
C#
|
.NET 2.0
|
.NET 3.0
|
.NET 3.5
|
.NET 4.0
|
Windows Server 2008 R2
|
Windows Server 2008
|
Windows Server 2003
|
Windows Server 2000
|
Windows 7
|
Windows Vista
|
Windows XP
|
Visual Studio 2010
|
SQL Server 2008 R2
|
MySQL 5.5
|
MySQL 5.1
|
Access (.mdb)
|
Office 2010
|
Office 2007
|
Internet explorer 8.0
|
Internet Explorer 7.0
|
Chrome
|
Javascript
|
Powershell
|
CSS 2.1
|
HTML 5
|
Crystal Reports 8.5
AlexCiv
Profilo
| Newbie
1
messaggi | Data Invio:
dom 8 giu 2014 - 17:04
Ciao a tutti,
ho creato un piccolo programma winform che avvia 5 Thread simultanei
Ogni Thread ha un timer che esegue delle query su SQL ogni 2 min circa.
Il tutto funziona ma se lo lascio in esecuzione per due giorni mi trovo il programma in crash senza tanti messaggi di debug.
Ho cercato di gestire il tutto con dei try catch ma nada..
Per gestire le query utilizzo una mia classe che continuo a richiamare, mi viene un dubbio che vado a saturare la memoria.
che mi consigliare per fare un debug sul problema?
grazie
Alessandro C.
0v3rCl0ck
Profilo
| Guru
1.120
messaggi | Data Invio:
lun 9 giu 2014 - 17:39
>Ciao a tutti,
Ciao!
>ho creato un piccolo programma winform che avvia 5 Thread simultanei
>Ogni Thread ha un timer che esegue delle query su SQL ogni 2
>min circa.
Intanto se hai bisogno di eseguire la query in background, sappi che il System.Timers.Timer e il System.Threading.Timer, già eseguono la callback in un thread separato rispetto a quello UI:
http://msdn.microsoft.com/en-us/magazine/cc164015.aspx
http://www.codeproject.com/Articles/167365/All-about-NET-Timers-A-Comparison
quindi non hai bisogno di creare a tua volta un altro thread, quello che esegui nella callback è già in esecuzione su un altro thread, a meno che non utilizzi un System.Windows.Forms o un DispatcherTimer (WPF)
>
>Il tutto funziona ma se lo lascio in esecuzione per due giorni
>mi trovo il programma in crash senza tanti messaggi di debug.
>Ho cercato di gestire il tutto con dei try catch ma nada..
>
>Per gestire le query utilizzo una mia classe che continuo a richiamare,
>mi viene un dubbio che vado a saturare la memoria.
>
>che mi consigliare per fare un debug sul problema?
La prima cosa che mi viene in mente è proprio il fatto del multi-threading, cioè non puoi assolutamente eseguire codice che interagisce con la UI da un thread differente da quello della UI, e quindi se ad esempio nella callback di un Timers.Timer o Threading.Timer, esegui una modifica ad una textbox, miaTextbox.text = "pippo", questo provoca un eccezione che fa crashare l'applicazione e che appunto non puoi intercettare con un try-catch, perchè hai fatto una cosa troppo grave e l'applicazione non può che essere killata. Al massimo puoi forse intercettare questa eccezione con un handler globale applicativo, che winforms e wpf hanno (mi ricordo quello di wpf Application.Current.DispatcherUnhandledException ma c'è anche l'alterego winforms), per cui puoi evitare di fare franare la tua applicazione intercettando l'eccezione, e bloccando la propagazione, ma ad ogni modo ti ritroveresti con un applicazione in uno stato instabile!
Quindi se stai toccando la UI da un thread non ui, una soluzione è utilizzare un Windows.Forms.Timer (o DispatcherTimer), e se stai compilando in .net 4.5, puoi sfruttare l'async/await, per facilitarti il compito di chiamare il db in un thread a parte, e quando a finito ritornare sul thread della UI.
>
>grazie
>
>Alessandro C.
di niente!
Michael Denny | Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !