TIMER, BACKGROUNDWORKER, EXTENSION METHOD

Uno dei compiti principali per uno statistico è produrre risultati. Tipicamente però questi risultati, che sono chiari per chi è “del mestiere”, appaiono incomprensibili a chi non mastica la materia. In queste situazioni subentrano le rappresentazioni grafiche, grazie alle quali qualcosa di molto complesso può divenire, invece, molto semplice. C# e VB.NET sono in grado, ovviamente, delle rappresentazioni statistiche grafiche. A volte può accadere però che il programma sia rallentato proprio a causa di queste rappresentazioni grafiche. Se ad esempio si vuole stampare una gran quantità di valori, o si vogliono rappresentare un gran numero di punti o linee, se non si eseguono alcune modifiche al codice, si rischia che il programma si blocchi per alcuni interminabili secondi. E’ inevitabile che in queste situazioni l’utente pensi che si sia creato un qualche errore che non permette di portare a termine il programma avviato, quando in realtà non è così.

Per ovviare a questo problema, una prima cosa da fare, è modificare l’algoritmo presente nel codice. Spesso abbiamo parlato di algoritmi naive e di algoritmi efficienti, come nel caso dell’algoritmo di Knuth utilizzato per il calcolo della media aritmetica. In questo caso, è risaputo che l’algoritmo di Knuth sia più efficiente dell’algoritmo naive. Non sempre però ci troviamo in questa situazione, spesso si devono confrontare diversi algoritmi che compiono la stessa operazione, senza sapere a priori quale sia il migliore tra tutti. In questa situazione può risultare molto utile la classe Timer. Questa classe permette di implementare un timer che restituisce il tempo impiegato dal programma necessario ad eseguire l’operazione richiesta. Grazie a tale strumento sarà quindi possibile scegliere l’algoritmo in grado di eseguire l’operazione nel minor tempo possibile.

A volte potrebbe accadere che nonostante si sia sostituito l’algoritmo iniziale con uno più efficiente, il programma si continui a bloccare. Questa situazione è molto comune quando si utilizza VB.NET o C# per riprodurre delle simulazioni statistiche grafiche. In questo caso potrebbe risultare conveniente utilizzare la classe BackgroundWorker. Questa classe permette di implementare una funzione in grado di eseguire in modo asincrono una specifica operazione. Utilizzando questo metodo sarà quindi possibile visionare in tempo reale i calcoli eseguiti dal programma, senza che questo risulti bloccato. La finestra di dialogo in questo caso non risulterà più bloccata, e sarà possibile muoverla, azione che prima non era possibile.

Infine, meritano di essere citati anche i metodi di estensione, o extension Methods. I metodi di estensione consentono agli sviluppatori di aggiungere funzionalità personalizzate ai tipi di dati già definiti senza creare un nuovo tipo derivato. I metodi di estensione consentono di scrivere un metodo che può essere chiamato come se fosse un metodo di istanza del tipo esistente. Un metodo di estensione può essere solo una routine Sub o una procedura di Function. Non è possibile definire una proprietà, un campo o un evento di estensione. Tutti i metodi di estensione devono essere contrassegnati con l’attributo di estensione <Extension> dallo spazio dei nomi System.Runtime.CompilerServices e devono essere definiti in un modulo. 

Imports System.Runtime.CompilerServices

Module StringExtensions
    <Extension()>
    Public Sub PrintAndPunctuate(aString As String, punc As String)
        Console.WriteLine(aString & punc)
    End Sub

End Module

Module Module1

    Sub Main()
        Dim example = "Hello"
        example.PrintAndPunctuate("?")
        example.PrintAndPunctuate("!!!!")
    End Sub

End Module

Lascia un commento

Progetta un sito come questo con WordPress.com
Comincia ora