Estoy escribiendo un juego usando C# y encontré varios casos en los que una función toma un delegado e inadvertidamente he pasado el nombre de una función en lugar de crear y almacenar en caché un delegado para usar como parámetro en su lugar. Esto hace que se cree un objeto delegado para cada llamada a estas funciones, que de inmediato se convierte en basura cuando la función regresa.¿Cómo evitar o detectar la inferencia de delegado implícita en C#?
Me gustaría encontrar todos los lugares donde cometí este error, y preferiría evitar leer cada línea de cada archivo que los busca (hay años de código). Vi cómo VB tiene una 'opción estricta' que desactivará la construcción implícita de objetos que creo que me funcionaría si C# tuviera esa característica, pero no creo que lo haga. También revisé las opciones de advertencia del compilador y ninguna de ellas parece ser útil aquí.
¿Hay alguna manera razonablemente conveniente de identificar estos objetos creados por la inferencia de delegado implícita para poder averiguar dónde debo crear/almacenar en caché las devoluciones de llamada para evitar la basura?
¿Hay algunos ejemplos de código que se puede brindar donde, por ejemplo, un estudio de búsqueda de expresiones regulares visual podría encontrarlos? – mellamokb
La única forma que veo si encuentro el método/función que acepta un delegado, luego haga clic con el botón derecho en> buscar referencias (aunque esto implica verificar manualmente cada llamada). –
¿Tiene alguna evidencia de que esto * realmente * le esté causando un problema? Esperaría que, en la gran mayoría de las ocasiones, la desventaja de rendimiento sea insignificante en comparación con el beneficio de legibilidad de utilizar una conversión de grupo de métodos en lugar de caché explícito. –