Problemi di performance in Visual Studio 2008

Ero praticamente certo che sarebbe uscita la hotfix giusta per me riguardante Visual Studio 2008.

Negli ultimi tempi ho sperimentato in prima persona rallentamenti eccessivi e chiaramente molto fastidiosi nell’utilizzo di alcune funzionalità dell’IDE e precisamente:

  • Passando alla vista Design di una Web Form;
  • Passando alla vista Html Source di una Web Form;
  • Compilando un progetto web di grosse dimensioni;

Oggi ho scoperto che da pochissimo tempo è disponibile una hotfix che risolve tutti e tre i problemi sopradescritti.

Link per il download.

Oracle Data Provider for .NET

Negli ultimi tempi mi è capitato spesso di lavorare su applicazioni che utilizzano Oracle come database piuttosto che Sql Server e, naturalmente, ho dovuto utilizzare nello strato di accesso ai dati le classi specifiche di Oracle, meglio note come Oracle Data Provider for .NET. Utilizzare queste classi significa avere a che fare con oggetti tipici di Oracle, es. gli Oracle data type, o i cursori utilizzati per contenere i resultset derivanti da una chiamata ad una store procedure, ecc.

Non avendo una esperienza significativa in Oracle ho sempre pensato che il supporto per .NET fosse alquanto limitato e ridotto all’essenziale,  es.  aprire una connessione ed eseguire un comando SQL che ritorna un resultset.  Ma noto con piacere che mi sbagliavo. La versione 11.1.0.6.20 dell’ODP for .NET fornisce sia una integrazione con l’ambiente Visual Studio  in versione 2005/2008, es. Server Explorer, wizards e designer, sia una integrazione con la piattaforma ASP .NET. Quest’ultima per me è la più interessante in quanto è possibile utilizzare alcuni providers  (argomento di cui ho già parlato in un mio articolo apparso sul sito dello user group DotNetSide) ed utilizzare come repository un database Oracle. Nello specifico i providers sono i seguenti:

  • Memberhip (gestione degli utenti e validazione)
  • Role (ruoli)
  • SiteMap (mappa del sito)
  • SessionState (  la Sessione di una applicazione ASP .NET )
  • Profile (profili degli utenti)
  • Web Event (informazioni circa lo “stato di salute” delle applicazione ASP .NET)
  • Web Part personalization (chi lavora con le WebParts può ora memorizzare le informazioni di personalizzazione in un db Oracle)
  • Cache Dependency

Il supporto per il Cache Dependency Provider a mio avviso è il più interessante di tutti. Ho già avuto modo di utilizzare ed apprezzare questo meccanismo (invalidazione automatica di un oggetto in cache a fronte di modifiche apportate a resultset memorizzati in un database mediante il meccanismo di notifica) su applicazioni basate su database SqlServer. Sarà sicuramente interessante e produttivo poterlo utilizzare anche in quei contesti dove il database è Oracle.

Tools di comparazione files

Tra i tools che ogni buon sviluppatore dovrebbe possedere non può mancare quello forse più classico e scontato, ovvero un software che compara il contenuto di 2 files ed evidenzia le differenze.

A meno di non voler usare le funzionalità di comparazione presenti nei vari software di controllo del codice sorgente, il compare di files è una operazione abbastanza frequente.

Ho provato vari tools di comparazione, quello che uso e che a mio parere è uno dei più validi (soprattutto perchè a free :)) è DiffMerge ver. 3.1.0.

Oltre alla classica funzione di comparazione di 2 files con indicazione grafica delle differenze, questo software contiene utilissime feature quali:

a) merging dei contenuti operando su 3 files;

b) comparazione di 2 cartelle con indicazione dei files mancanti e dei files con contenuto diverso;

c) aggiunta di un comodo menù contestuale in Windows Explorer per una rapida comparazione di files;

d) è multipiattaforma;

e) (già detto) è gratuito;

PowerCommands for Visual Studio 2008

Ho installato già da un po’ di tempo i PowerCommands for Visual Studio 2008 (una estensione dell’IDE per aggiungere funzionalità) e devo dire che sono davvero utili.

Tra le funzionalità più interessanti segnalo:

Remove and Sort Usings: a livello di progetto, ordina gli statements using e rimuove automaticamente quelli inutilizzati (disponibile solo per progetti scritti in C#);

Collapse projects: come dice lo stesso nome, “collassa” uno o più items (non necessariamente progetti) per migliorare la visione d’insieme della solution;

Edit Project File: carica il file di progetto nell’editor (dopo aver scaricato il progetto stesso), fornendo la sintassi colorata di un file XML;

Open Command Prompts: apre il prompt dei comandi di Visual Studio a partire dal path fisico dell’item selezionato;

Clear Recent Project List: permette di eliminare tutti o alcuni progetti aperti di recente dalla lista. Se non ricordo male senza questo tool è necessario editare il registro per ottenere lo stesso risultato.

Il tool dispone di altri comandi interessanti.

Tecnologia in evoluzione ed il suo utilizzo

In questi giorni mi è capitato frequentemente di leggere su blogs e forum vari commenti entusiastici sull’adozione delle ultime tecnologie appena sfornate – parlo di Silverlight, Ajax e LINQ, le quali hanno ormai preso prepotentemente piede nello sviluppo di applicazioni. Premesso che utilizzo anch’io sia Ajax che LINQ, ritengo che il tutto debba essere calato nel contesto opportuno di utilizzo, senza lasciarsi prendere troppo dall’entusiasmo come invece vedo che accade. Può sembrare scontato ma la realtà è ben diversa. Comprendo perfettamente che lo sviluppatore esperto e soprattutto appassionato affronti le sfide tecnologiche che molto frequentemente il nostro mestiere ci offre, con l’entusiasmo di un ragazzino, ma credo che ultimamente si stia un po’ esagerando. Sembra quasi che oggiogiorno ogni applicazione web debba essere necessariamente Ajax-enabled e sembra che LINQ to SQL, o meglio gli ORM in generale, abbiano sostituito di colpo l’utilizzo di strumenti per così dire tradizionali quali le store procedure, diventate improvvisamente uno strumento superato. Riflettendo un attimo, questo entusiasmo non è certo una novità nel mondo delle tecnologie software: come esempio non isolato, ricordo che  successivamente all’introduzione dei web services tutti gli utilizzatori di software hanno adottato incondizionatamente questa tecnologia anche se le loro applicazioni non erano affatto interoperanti se non con sè stesse…L’unificazione del paradigma di sviluppo in funzione dei diversi contesti di utilizzo si è verificata solo con l’avvento di WCF. Accadrà lo stesso con le attuali tecnologie ?