Problemi relativi alle applicazioni desktop con interfaccia utente multithread

2

Sono coinvolto nello sviluppo di un ricco progetto di interfaccia utente: applicazione Windows desktop. L'applicazione utilizza invocazioni asincrone e, a sua volta, dovrebbe essere pronta per elaborare messaggi esterni (eventi). Il problema è chiaro: è stato costruito per la prima volta come un semplice prototipo e non è stato sottoposto a prove di stress e tutto andava bene. Poi è stata sviluppata l'applicazione: il numero di chiamate al server e il numero di eventi dal server sono alti e le prestazioni sono basse. Inoltre, gli utenti hanno notato che a volte le prestazioni sono estremamente basse. Invocazioni asincrone basate sul pool di thread (BeginInvoke, EndInvoke), gli eventi esterni stanno passando dal servizio WCF (.NET 3.5). Il mio obiettivo è sincronizzare tutti i compiti e mettere le priorità ad ogni esecuzione in applicazione desktop . La mia domanda è: esiste qualche pratica su come raggiungere il mio obiettivo: modelli , elenco priorità attività , altri? Cosa devo fare alle prime, alle seconde e alle successive?

Grazie

    
posta Zzz 12.01.2011 - 11:14
fonte

2 risposte

2

Performance

Come sempre le prestazioni trovano i veri problemi, li misurano, li correggono e si confrontano con i tuoi primi risultati. Basta apportare modifiche che sembrano buone sulla carta e vedere cosa succede non è abbastanza, questo ti farà perdere tempo

Utilizza uno strumento come Ants profiler per questo

Il tuo problema

Se i passaggi generali non ti hanno aiutato.

In generale, direi che qualsiasi forma di prioritizzazione, ordinamento o sincronizzazione dei tuoi ti darà costi di performance, quindi se non ne hai bisogno da una prospettiva funzionale lasciali fuori. Dare ai tuoi thread UI una priorità più alta potrebbe darti un tempo di risposta percepito migliore ma potrebbe anche non farlo, cosa fai quando un thread con bassa priorità a lunga esecuzione è tutto pronto?

Se vuoi ancora le tue priorità diventa più un problema di codice (quali meccanismi stai usando, hai il tuo programmatore ecc.) e dovresti pubblicare il tuo codice e spostare la domanda sullo stackoverflow.

Non puoi separare completamente i thread dell'interfaccia utente dai thread di ricezione dei messaggi? Mettere la ricezione del messaggio in un servizio Windows separato?

Guida generale

Probabilmente per generale ma potrebbe darti qualche nuova prospettiva su come risolvere il tuo problema:

risposta data 12.01.2011 - 12:49
fonte
0

Microsoft WCF RIA ha una soluzione per questo problema. Poiché le chiamate asincrone sono comuni nelle applicazioni RIA.

Microsoft WCF RIA Services simplifies the traditional n-tier application pattern by bringing together the ASP.NET and Silverlight platforms. RIA Services provides a pattern to write application logic that runs on the mid-tier and controls access to data for queries, changes and custom operations. It also provides end-to-end support for common tasks such as data validation, authentication and roles by integrating with Silverlight components on the client and ASP.NET on the mid-tier.

    
risposta data 12.01.2011 - 12:14
fonte