Bene, I penso quello che stai chiedendo è un modo per determinare quali sono i parametri di tipo di un tipo generico in fase di esecuzione - nel tuo esempio la situazione è complicata perché stai cercando un'interfaccia non un'istanza di oggetto.
Nethertheless questo è ancora piuttosto semplice, il seguente esempio dovrebbe almeno punto nella giusta direzione su come fare questo:
object obj= new List<string>();
Type type = obj.GetType();
Type enumerable = type.GetInterfaces().FirstOrDefault(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IEnumerable<>));
if (enumerable != null)
{
Type listType = enumerable.GetGenericArguments()[0];
if (listType == typeof(string))
{
IEnumerable<string> e = obj as IEnumerable<string>;
}
}
Ma non posso davvero vedere come questo aiuta a risolvere il sottostante problema di monitorare la cache?
In passato, quando si tentava di monitorare le prestazioni delle cache, ho trovato che creare i propri contatori Perfmon molto utili per il monitoraggio - come esempio di base inizia con un contatore "# Voci" (che si incrementa ogni volta che un elemento viene aggiunto alla cache e decrementa ogni volta che un elemento viene rimosso dalla cache) e aggiunge contatori come pensate sarebbe utile mentre si va - un contatore di visite cache e un contatore miss della cache sono normalmente piuttosto utili.
È anche possibile fare in modo che il contatore Perfmon analizzi le informazioni di memorizzazione nella cache disponendo di molte istanze dei contatori, uno per ogni tipo di cache (o nel caso più probabile il tipo generico IEnumerable
in cache), proprio come il "Processo" il gruppo di contatori perfmon ha un'istanza per ogni processo nel sistema, si avrà un'istanza per ogni tipo nella cache (in più si dovrebbe aggiungere anche un'istanza "_Total" o simile).
L'utilizzo dei contatori Perfmon mediante operazioni di registrazione sulla cache consente di monitorare le prestazioni della cache in una discreta quantità di dettagli con un sovraccarico di prestazioni di runtime molto ridotto.
Quale pensi che possa essere l'errore? Potrebbe aiutare con suggerimenti su come monitorarlo piuttosto che questo potenziale approccio da mazza. – Lazarus
È per rilevare i problemi che "potrebbero" verificarsi, quindi non sappiamo in anticipo. –