visual valid typeparam returns remarks name example comment c# .net clr

valid - ¿Cuál es la cantidad máxima de parámetros que un método de C#se puede definir como tomar?



typeparam c# (2)

Estoy tratando de averiguar cuál es la cantidad máxima de parámetros que puede tener un método en C #. Revisé la respuesta en todas partes, incluida la documentación oficial de C #, MSDN y un par de referencias de CLR y no puedo encontrar una respuesta. ¿Alguien tiene una respuesta a esta pregunta?


Aquí está su respuesta teórica:

Para insertar los argumentos de método en la pila, el código compilado tiene los siguientes códigos de operación MSIL para elegir:

ldarg.0

ldarg.1

ldarg.2

ldarg.3

ldarg.S

ldarg

ldarg.0 a ldarg.3 se usa para insertar los primeros 4 argumentos de método en la pila (incluido this como primer argumento para los métodos de instancia).

ldarg.S toma un número de argumento de 8 bits, por lo que se puede usar para insertar hasta 256 argumentos en la pila.

Eso nos deja con ldarg antiguo ldarg , que puede manejar la mayoría de los argumentos de método: toma un número de argumento de 16 bits sin signo. Por lo tanto, la mayor cantidad de argumentos que se pueden compilar satisfactoriamente en MSIL válido es 2^16 = 65,536 .

Sin embargo, como han notado otros, existen varios límites prácticos de tamaño de pila que se aplican cuando realmente se intenta ejecutar su método dependiendo de la plataforma / arquitectura del sistema. Según la respuesta de rmiesen, parece que la implementación .NET actual limita el tamaño máximo de la pila en tiempo de ejecución a 2^14 .


Utilicé un programa desechable para crear un programa para determinar la cantidad máxima de parámetros que puedo pasar a un método. Según los resultados de mi experimentación, lo más cercano a una respuesta que puedo encontrar es la siguiente (todas las cuales solo son válidas en mi computadora):

  1. Una aplicación .net que contiene un método con 16383 parámetros se puede compilar, ejecutar y llamar (!)
  2. Se puede compilar una aplicación .net que contenga 16384 o más parámetros, pero ejecutar dicho programa arroja una excepción no declarada.
  3. También se puede compilar una aplicación .Net que contenga 50000 parámetros, pero al intentar ejecutar dicha aplicación, se genera una Exception.
  4. Intentar compilar una aplicación .net que contenga 100000 parámetros o más resultados en csc.exe dando un error en tiempo de compilación, indicando que la expresión resultante es demasiado larga o compleja de manejar.

Aparte de eso, ¿alguien tiene una respuesta definitiva a esta pregunta?

PD: si alguien quiere probar este experimento en su computadora, puede comenzar con mi programa de prueba, que se puede descargar https://docs.google.com/open?id=0B1Q3uRTkbsXic2cwUFpXanNkSk0