Teched: Optimizing CompactFramework Performances

Ieri ho assistito ad una sessione sull’ottimizzazione delle performance sul Compact Framework. Sessione interessante dove, dal mio punto di vista, mi sono confermato alcuni aspetti da tenere BENE in considerazione effettuando il design di un’applicazione, e dove sono riuscito ad aggiungere alcuni nuovi.

Loader&Startup

Chiunque abbia svilupapto un’applicazione mobile ha notato la particolare lentezza di caricamento alla prima esecuzione, rispetto a codice sviluppato in maniera nativa; questo deriva principalmente dal JITCompiler che deve provvedere a compilare in maniera nativa il codice che deve essere eseguito. Oltre a ciò però vengono fatti una serie di verifiche di security su tutti gli i file eseguibili dell’applicativo (che per fortuna vengono poi messi in cache), nonchè viene fatto un hashing check per verificare lo strong name. Da queste affermazioni un unica considerazione: cercare di mantenere il codice più piccolo possibile, lasciando eventuali risorse (immagini o altro) non embedded nel codice, ma come risorse esterne: La verifica dello strong name pesa per 1 secondo per megabite di codice allo startup (non male!); potrebbe, in questo senso, essere valutabile se firmare o meno il progetto.

GarebadgeCollector

Se il processo sta andando out of memery, rimuove dalla memoria il codice che è stato compilato dal Jit, questo accade quando ci sono 1milione di oggetti istanziati (sono tanti, ma con il performance monitor si può verificare che il numero di oggetti istanziati da un’applicazione semplice è comunque notevole); la stessa cosa viene fatta quando l’applicazione va in background: questo è perchè si vuole lasciare più memoria possibile al sistema.

CG.Collect non va utilizzato! Questo in realtà lo sappiamo già, ma è bene ricordarselo 🙂 Il GC sa quando deve fare le cose senza che noi glielo ricordiamo.

Alcune funzioni del .net framework impattano moltissimo il garbade collector, come la manipolazione delle stringhe ed il boxing dei tipi (piuttosto è meglio usare i generics).

Tips & Tricks

Per la gestione delle form, valgono sempre le solite considerazioni: laricare i form in background, usare sempre BeginUpdate/EndUpdate quando disponibili, impostare SuspendLayout/ResumeLayout sulla form quando si aggiungono o spostano controlli sulla form.

Un consiglio utile che ho avuto, è stato: “L’exception handling non è costosa in termini di performance… fintanto che non ne fai una throw”: l’eccezione è una ECCEZIONE, e così deve essere trattata; non deve essere gestita per controllare il flusso dell’applicativo (ogni tanto si cade in questo errore).

Per quanto riguarda la gestione dell’IO, cercare se possibile di usare le stess dimensioni dei buffer interni, per reference:

  • FileStream: 128 bytes
  • StreamReader, StreamWriter: 1024

Infine due dati sul reflection dei tipi, (dai… parte di una slide la “prendo in prestito” 🙂 

Performance cost

  • Type comparisons (for example: typeof())—inexpensive
  • Member access (for example: Type.InvokeMember())—think 10-100x slower

Working set cost

  • Member enumerations (for example: Type.GetFields())—expensive
  • Runtime data structures: ~100 bytes/type, ~80 bytes/method

Be aware of APIs that use reflection as a side effect

  • Override Object.ToString()
  • Override GetHashCode() and Equals() for value types

Preconf Windows Sharepoint v.3.0

Come previsto la sessione è stata per me molto interessante: è vero, nessuna novità praticolare, stiamo infatti parlando di tecnologia che (anche se è nata in maniera ufficiale questa notte), è in beta da diverso tempo. In ogni caso, fare un giro con un pilota su una macchina da corsa… è diverso da aver letto e studiato le varie caratteristiche tecniche e averla vista sul banco di prova;)

Tra le cose che più interessanti di questa nuova versione il features framework, essenzialmente la possibilità di definire un insieme di funzionalità del sito che possono essere attivate o deattivate, dove per funzionalità si intendono menu, pagine, assembly, e…. supporto agli eventi potenziato (finalmente): se cancello un’item da una lista posso esserne notificato, fare una query caml su tutta la mia site collection e verificare se quell’elemento è stato usato.

Il tutto con la possibilità di pachetizzare il tutto per un semplice deployment, che include feature dependeces.

Molta enfasi delle sessioni è stata data alla possibilità di centralizzare tutte le componenti nelle versione ghosted, molto meglio di come potesse essere fatto e manutenuto prima, permettendo quindi una manutenibilità molto più ottimizzata delle soluzioni su sharepoint.

Lo sviluppo di webpart è molto migliorato, peccato che non ci sia un supporto un po’ più esteso nel designer: niente di grave, fare le cose a manina è sempre bello, ma uno sforzo in più non sarebbe stato male 😉

Teched-Developers: si parte!

Sono da poco arrivato a Barcellona… In un’atmosfera davvero particolare. In autobus ho subito incontrato Giorgio Sardo (vincitore dell’ImagineCup) con alcuni amici.

Durante il tragitto la discussione è subito stata: è meglio salvare periodicamente dati provenienti da una periferica bluetooth verso uno smartphone, su file di testo piuttosto che su database, con il fine di minimizzare al massimo il consumo della batteria…
Ho già capito che sarà veramente una settimana intensa di tecnologia 😉

L’organizzazione è veramente imponente! Computer ovunque (per raccogliere feedback dalle sessioni), copertura totale via Wifi, free drinks e fruits… Speriamo non sia solo apparenza 🙂

Oggi comincio con la preconf su Windows Sharepoint Services 3.0 con Patrik Tisseghem e Ted Pattison (argomento che ho già esplorato con le varie beta, ma un bel giro dalla A alla Z… male non fa).

Via!

Publicly useful information to be beamed in Seoul via RFID

Ho letto questo interessante post riguardo la copertura di seoul tramite Rfid per la trasmissioni di dati. Sono secondo me fenomeni da tenere sotto controllo, perchè come al solito, prima o poi alcuni di questi vengono importati in Italia.

Pensandoci, non sarebbe male, si potrebbero aprire molti scenari mobile, e quindi applicazioni per noi 😉

Riporto il post di seguito.
Ciao!

 

Filed under: Handsets, GSM

South Korea is bringing the heat yet again, and this time we’re seeing the “first ever 900MHz RFID” services that can provide product, traffic, and other pertinent information directly to your RFID-equipped cellphone while out and about. If you’re not totally freaked out about Big Brother being able to tell precisely what you’re looking for on your mobile at all times, Alien Technology and U-IT have developed a mobile RFID pilot aimed squarely at business-to-consumer (B2C) scenarios. The team plans to implant the voyeuristic chips into “products from Symbol Technology” next year, and initial information is being offered about movies, wine, bus routes, and other publicly useful tidbits. The idea is to install RFID chips in all 70,000 taxis cruising around Seoul in order to give customers convenient access to the data they crave, and if all goes well, additional intelligence will be added concerning “medicines, food, and social relationships,” while “travel and tourist related info” should be live in July 2007.
[Via CNET]

Read | Permalink | Email this | Linking Blogs | Comments

Source: Publicly useful information to be beamed in Seoul via RFID
Originally published on Sun, 05 Nov 2006 11:49:00 GMT

Teched 2006 Barcellona

Lunedì mattina parto per Barcellona, c’è un misto di attesa e trepidazione per questo che sarà il mio primo evento MS. Come citavo nel mio blog su thinkmobile.it vado solo per confermare che le conferenze italiane sono altrettanto valide e sicuramente meno costose 😉

Sto in questi sere (il tempo è sempre troppo poco) cercando di definire le varie sessioni che seguirò, tra gli argomenti principali:

  • Windows SharePoint Services v3 and Office SharePoint Servers 2007
  • .NET Framework 3.0
  • .NET Compact Framework e CE 6.0

Le sessioni sono talmente tante che penso passerò più tempo a casa a vedere il cd post event.

Mercoledì sera, che tristezza, sarò al Italy Country Drinks (scherzo 😉 Come sempre all’estero ci si rintana con gente della propria nazione.

Su questi schermi posterò le impressioni sulle varie sessioni.

Stay tuned 😉

Perdita di connessione durante il debug e breakpoint

Ultimamente sto soffrendo di problemi di connessione al device durante il debug. Durante il passaggio da una funzione all'altra si inchioda e VisualStudio mi ritorna l'errore

"The remote connection to the device has been lost. Please verify the device connection and restart debugging"

l'errore lo ottengo passando da un componente all'altro, apparentemente senza alcuna relazione.

Non ho trovato molte informazioni in rete, ma sembra che il problema sia dovuto ai breakpoint del debugger: per qualche motivo, impostatndo qualche breakpoint in più o in meno, si verifica una condizione che fa fallire il processo di step-through.

Una soluzione che con me ha funzionato è: rimuovere tutti i breakpoint e successivamente chiudere e riaprire VisualStudio.

(E' una cosa riporta a tempo indietro, ma alla fine "chiudere e riaprire" serve sempre…. )

Qualche link utile:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=487407&SiteID=1
http://www.eggheadcafe.com/aspnet_answers/NETFrameworkCompactFramework/Jan2006/post25812386.asp

Ciao!

Serializzazione di Custom Entities in CF con XmlTypeAttribute specificato

Ho scritto un piccolo articoletto riguardo un problema con l’utilizzo dell’attributo XmlTypeAttribute all’internodi un’applicazione CF2.0

Ho sperimentato infatti in un progetto come il CF serializzi in maniera leggermente diversa lo stesso codice dal framework standard. E’ necessario stare attenti a come si specificano le proprietà nel caso di classi che derivano da altre.

Hope it helps

WindowsMobile Virtual Labs

Segnalo a tutti la disponibilità di alcuni Virtual Labs molto interessanti che è possibile fruire via web.
Mettono a disposizione un’ambiente virtuale completo su cui fare esperimenti prima di mettere mano al proprio pc o server (e fare danni o errori 😉

Ci sono ovviamente dei training guidati che è possibile seguire.

Il tutto è disponibile all’indirizzo: http://msdn.microsoft.com/virtuallabs/windowsmobile/

Interessante anche che ci siano già i primi sulle beta di windowce 6.0: http://msdn.microsoft.com/virtuallabs/windowsce/

Alberto

MSMQ e RegFlushKey

A seguito dei problemi di persistenza del registro che io ho registrato su un ipaq rx1950, vedi post precedente, e visto che alcuni si sono trovati con il mio stesso problema, allego a questo nuovo post un’esempio di codice che io uso per forzare il flush del registro e rendere le modifiche persistenti.

Il codice in realtà non è mio, ma non ricordo da dove ho preso spunto e trovato alcune cose 😉

Trovate in allegato sia il sorgente che, se volete usarlo, il file già compilato nella directory bin/debug.
C’è anche una parte che provvede a copiare i file necessari a MSMQ, personalmente io preferisco usare il cab fornito da MS: in realtà non cambia nulla.
Se volete, dovete riabilitare la voce dal menu.

Spero vi sia utile.Ciao!