Supongamos que el código que está llamando a este método conoce los tipos de argumentos. Si es así, puede empaquetarlos en el tipo apropiado Tuple
de .NET 4, y pasar su instancia (Tuple es tipo de referencia) a dicho método como objeto (ya que no existe una base común para todas las Tuplas).
El principal problema aquí es que no es fácil procesar los argumentos dentro de este método sin boxing/unboxing, y probablemente, incluso sin reflexión. Trate de pensar qué se debe hacer para extraer, digamos, enésimo argumento sin boxeo. Al final comprenderá que debe tratar las búsquedas de diccionario allí (que impliquen Dictionary<K,V>
o internal dictionaries utilizados por CLR) o con boxeo. Obviamente, las búsquedas de diccionario son mucho más costosas.
Estoy escribiendo esto porque en realidad desarrollamos una solución para un problema muy similar: debemos poder operar con our own Tuples sin boxeo, principalmente para comparar y deserializar (los tuplos son utilizados por el motor de base de datos que desarrollamos, por lo que de cualquier operación básica es realmente esencial en nuestro caso).
Pero:
- terminamos con una solución bastante compleja. Eche un vistazo, por ej. al TupleComparer.
- El efecto de la ausencia de boxeo no es tan bueno como esperábamos: cada operación de boxeo/desempaquetado se reemplaza por una única indexación de matriz y pocas llamadas a métodos virtuales, el costo de ambas maneras es casi idéntico.
El único beneficio del enfoque que hemos desarrollado es que no "inundamos" a Gen0 con la basura, por lo que las colecciones Gen0 ocurren con mucha menos frecuencia. Como el costo de la colección Gen0 es proporcional al espacio asignado por los objetos "activos" y a su recuento, esto ofrece una ventaja notable, si otras asignaciones se entremezclan con (o simplemente suceden durante) la ejecución del algoritmo que tratamos de optimizar de esta manera.
Resultados: después de esta optimización nuestras pruebas sintéticas mostraron de 0% a 200-300% de aumento en el rendimiento; por otro lado, la simple prueba de rendimiento del motor de la base de datos ha mostrado una mejora mucho menos impresionante (alrededor del 5-10%). Se desperdició mucho tiempo en las capas superiores (también hay un ORM bastante complejo), pero ... Lo más probable es que eso sea lo que verás después de implementar cosas similares.
En resumen, le aconsejo que se centre en otra cosa. Si quedará completamente claro que este es un problema de rendimiento importante en su aplicación, y no existen otras buenas maneras de resolverlo, bueno, continúe ... De lo contrario, simplemente está alentando a su cliente o al suyo haciendo el trabajo prematuro optimización.
sí, pero esto limita el tipo de toda la lista de argumentos a un solo tipo ... – DxCK
Puede mezclar y combinar con sobrecargas ... –
Lo he editado para agregar más información aquí ... –