User story #1305
Updated by André Neto over 2 years ago
con Nicolo' abbiamo scoperto un problema di performance riguardo
all'uso di TypeDescr in MARTe2
Per gestire possibili tipi diversi di ingresso e uscita le GAMs o i
DataSources spesso fanno run-time un check di tipo come:
if (inType == UnsignedInteger8Bit)
....
else if((inType == UnsignedInteger16Bit)
.....
-----
non credo sia facile andare a cambiare il funzionamento (i meccanismi
e cosi' via. Abbiamo scoperto che usa C++ in questo caso sono piuttosto oscuri). Pero' se ci pensi bene non c'e' mai reale necessita' l'implementazione dell'overloading di fare
== per TypeDescriptor ha un grosso impatto nella performance,
introducendo notevoli ritardi nell'esecuzione ad intervalli regolari.
Il workaround immediato e' quello di salvarsi il check tipo dei tipi parametri in realtime (Execute() o Synchronise()) poiche' questi sono gia' risolti prima,
Setup come un codice intero e quindi non fare il check senza passare per l'oggetto
TypeDescripto, ma credo che valga la pena dedicare troppa energia ad una soluzione. La cosa migliore e' farlo in Setup() o di rivedere quell'implementazione.
SetConfirguredDatabase() e riportare l'informazione in qualche class field.
Direi piu' una norma di buona programmazione da tenere a mente, e magari da pubblicizzare (ho scoperto che facevo questa check anche in altre GAMs e DataSources)
-----