Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Para reducir los costos de compilación y editor, F# 11 comparte bibliotecas importadas y evita el análisis repetido. Mida la carga de trabajo afectada en lugar de dar por sentada una mejora general del rendimiento o del uso de memoria en toda la versión.
Uso compartido de bibliotecas binarias importadas
FSharp.Compiler.Service puede compartir gráficos de biblioteca importados compatibles entre proyectos que usan las mismas dependencias binarias.
FSharpChecker.Create expone shareImportedAssemblies, habilitado de forma predeterminada. Esto evita conservar un grafo importado completo independiente para cada proyecto.
El uso compartido requiere la coincidencia de dependencias resueltas y la configuración de importación. Se excluyen las referencias, los proveedores de tipos, los ensamblados de varios módulos y los cierres de dependencia ambiguos. Ya se han compartido las importaciones del framework.
La PR de implementación midió la memoria conservada después de comprobar y mantener en memoria todos los proyectos. Su carga de trabajo ReSharper.FSharp de diez proyectos usó 1547,2 MB sin este uso compartido y 1002,2 MB con él. La carga de trabajo de la solución de compilador cambió solo un 0,1 %. Estos son experimentos específicos del cambio, no ahorros generales de actualización. La superposición en referencias binarias grandes explica gran parte de la diferencia.
Metadatos retenidos frente a asignaciones temporales
F# 11 reduce la cantidad de metadatos retenidos gracias a la creación diferida, las tablas más pequeñas y la reutilización. Por separado, la lectura de metadatos y la especialización en línea asignan menos datos temporales. La memoria dinámica retenida, el volumen de asignación y la memoria de proceso son métricas diferentes; no agregue resultados de estos experimentos superpuestos.
Análisis y navegación del editor
Las siguientes mejoras se aplican a diferentes capas:
| Component | Trabajo evitado o acotado |
|---|---|
| diagnósticos de Visual Studio | Reutiliza los diagnósticos para documentos sin cambios con versiones de texto y proyecto, rutas de acceso y opciones consideradas. Esto se dirige al análisis inactivo repetido, no a la reutilización arbitraria de resultados obsoletos. |
| Visual Studio Buscar todas las referencias y cambiar el nombre | Limita las comprobaciones de tipos simultáneas en lugar de iniciar una por cada documento a la vez, al tiempo que conserva la cancelación. |
| Búsqueda de referencias a símbolos externos | Omite los proyectos que no hacen referencia al ensamblado binario del símbolo. |
| Análisis incremental de FCS | Sincroniza el estado del builder para que las solicitudes superpuestas no construyan cadenas de análisis duplicadas para el mismo cambio. |
La corrección de Peek evita un interbloqueo de navegación por metadatos. Use Ir a la definición para firmas de metadatos generadas; Echar un vistazo se detiene en los documentos existentes. Estas mejoras requieren componentes actualizados de editor/FCS, no solo un paquete Core de una aplicación.
Simultaneidad de compilación y tareas de compilación
La compilación paralela usa el trabajo independiente de archivo y fase del compilador de forma predeterminada en F# 11. El orden de origen sigue siendo parte del idioma; el paralelismo no legaliza las dependencias hacia adelante.
Las tareas de compilación también usan el entorno específico de cada tarea de MSBuild y sus funciones de ruta, en lugar de cambiar el estado global del proceso. El almacenamiento en caché de sobrecargas reduce la resolución repetida y la compilación de patrones con guarda evita la duplicación explosiva en algunas combinaciones de disyunción y guarda.
Comparar la métrica que necesita
- Para la latencia de compilación, compare compilaciones completas equivalentes con configuraciones idénticas de optimización, salida determinista, referencia y caché. Se usa
--parallelcompilation-para una comparación controlada. - Para la memoria del análisis retenida, mantenga activos los mismos proyectos y distinga la memoria administrada en uso del volumen de asignación y de la memoria del proceso.
- Para evaluar la capacidad de respuesta, reproduzca la acción en el editor o la carga de trabajo en inactividad. La salida de un programa de consola no mide el trabajo de un editor.