Analizar el rendimiento de una carga acotada con GitHub Copilot
Un agente puede sugerir un cuello de botella. Solo una medición puede mostrar lo ocurrido con tu carga de trabajo. Un resultado válido puede ser ninguna mejora medible.
Resumen del laboratorio

Ilustración conceptual original (SVG)
| De un vistazo | Tu ruta |
|---|---|
| Nivel y tiempo | 300; 60 minutos (estimación de facilitación) |
| Acción inicial | Mantén sin cambios el límite de medición y la salida funcional. |
| Materiales del aprendiz | Descarga 10-profiling.zip |
| Espacio de trabajo | Abre la raíz del kit extraído; ejecuta la baseline desde . relativa a esa raíz |
| Comprobación inicial esperada | El proyecto seleccionado compila. La compilación por sí sola no prueba el comportamiento. |
| Ayuda de configuración | Descarga, extrae, Git local y GitHub opcional |
[!NOTE] Un resultado inconcluso es mejor que un tiempo fabricado.
Conceptos · Primera tarea · Lista de evidencias · Restablecer
Objetivos de aprendizaje
- Define un límite de medición antes de optimizar.
- Conserva la salida funcional mientras comparas un único cambio.
- Distingue tiempo transcurrido, asignaciones, memoria retenida y memoria máxima.
- Evita pruebas de carga, concurrencia sin límites y conjuntos de datos grandes en una máquina compartida.
Antes de empezar
Prepara 10-profiling con la configuración de recursos limitados.
El fixture predeterminado es el pequeño DataAnalyzerReporter. Los
ejemplos importados de ContosoOnlineStore y mediciones comparativas
son una ampliación opcional en una máquina aislada, no parte de la ejecución predeterminada.
No inicies aquí BenchmarkDotNet, una prueba de carga ni una expansión de solicitudes en paralelo.
Conceptos y casos de uso
| Medida | Qué te indica | Qué no te indica |
|---|---|---|
Tiempo transcurrido de Stopwatch |
Tiempo real dentro de un límite definido | Por qué se empleó allí ese tiempo |
| Contador de asignaciones | Bytes asignados dentro de un ámbito | Máximo conjunto de trabajo |
GC.GetTotalMemory |
Estimación de memoria administrada en un instante | Asignaciones totales o memoria máxima del proceso |
| Muestra del perfilador | Dónde se muestreó la ejecución | Ahorros garantizados por una sugerencia de código |
La demostración actual inicia su cronómetro después de cargar la entrada. Por tanto, la duración que muestra
no mide la carga de archivos. Explica esa limitación antes de cambiar
FileLoader.
Escenario del ejercicio
El analizador lee líneas de números, ignora las líneas vacías, suma los valores analizados
correctamente y escribe una línea de informe por registro procesado. ReportGenerator abre
el archivo de salida por cada línea añadida. Investiga la escritura por lotes sin cambiar el análisis
de datos ni el orden de salida.
Tarea 1 - Acotar e inspeccionar la carga de trabajo
-
Lee
Program.cs,FileLoader.cs,DataAnalyzer.csyReportGenerator.cs. -
Inspecciona el tamaño del
data.txtincluido. Usa una copia pequeña para experimentar; no generes un conjunto mayor solo para obtener tiempos impresionantes. -
Registra el directorio de trabajo y la configuración cultural. El análisis usa el formato numérico cultural actual; un cambio de cultura es un cambio de comportamiento, no una optimización de E/S.
-
Compila una vez en modo Release:
dotnet build DataAnalyzerReporter.csproj -c Release -m:1 -p:UseSharedCompilation=false dotnet run --no-build -c Release --project DataAnalyzerReporter.csproj -- data.txt -
Conserva el informe generado como evidencia funcional. Ejecuta únicamente en la copia desechable porque la demostración reemplaza
output.txt.
Tarea 2 - Formular una hipótesis refutable
En Ask:
Inspect the loading, parsing and report-writing boundaries. Which operation is
inside the current stopwatch? Propose one bounded measurement that can compare
per-line append with a buffered writer. Do not change parsing, culture, or output.
En Plan, exige:
- la misma entrada, compilación, estado de la máquina y límite de medición;
- un calentamiento y como máximo tres ejecuciones medidas secuenciales;
- muestras de tiempo transcurrido y comparación de la salida funcional;
- ningún cambio de caché, paralelismo ni algoritmos ajenos al alcance;
- una condición de detención si la máquina está ocupada o los resultados tienen ruido.
Tarea 3 - Capturar la línea base
Registra las muestras sin procesar, sin afirmar un objetivo:
| Variante | Hash/filas de entrada | Compilación | Límite | Muestras | ¿Salida igual? |
|---|---|---|---|---|---|
| Antes | Registra valores reales | Release | Procesamiento del informe | Registra duraciones reales | Línea base |
| Después | Mismos valores | Release | Mismo límite | Registra duraciones reales | Sí/No |
Para cargas diminutas, un temporizador de milisegundos puede indicar cero. Informa de la resolución insuficiente; no inventes una cifra más rápida ni restes un tiempo hipotético de «retraso simulado».
Tarea 4 - Implementar una optimización
- Pide a Agent que agrupe las escrituras del informe preservando el orden y el comportamiento del análisis.
- Inspecciona la liberación de recursos y los errores. Un escritor debe cerrarse incluso después de un fallo.
- Vuelve a ejecutar las comprobaciones funcionales antes de medir tiempos.
- Repite la misma medición acotada.
- Compara las salidas y las muestras observadas. Si la salida cambia, rechaza la optimización independientemente de cualquier aceleración aparente.
Verifica tu trabajo
- El límite medido es explícito y no ha cambiado.
- Se registran la entrada, la configuración cultural, el modo de compilación y la comparación de salidas.
- Se conservan las muestras sin procesar; no se afirma ningún porcentaje universal.
- Una optimización está aislada de los cambios de análisis y reglas de negocio.
- La ejecución se mantuvo dentro del presupuesto de recursos acordado.
Solución de problemas
Las muestras con ruido pueden reflejar otros proyectos, JIT, la caché de archivos o la resolución de medición. No intentes corregir el ruido saturando la máquina. Una prueba más pequeña o un resultado no concluyente son preferibles a una medición comparativa engañosa.
Práctica independiente
En una máquina autorizada e inactiva, analiza el rendimiento de una prueba comparativa existente de ContosoOnlineStore. Registra su configuración exacta, los retrasos sintéticos, los costes de preparación y lo que excluye la medición. No deduzcas ahorros de latencia solo a partir de la complejidad asintótica.
Restablecimiento
Detén únicamente el proceso o perfilador que iniciaste. Conserva archivos pequeños de evidencia y restaura la implementación modificada en la copia desechable. Elimina solo sus informes generados.