Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
Para reducir los costos de compilación y de editor, F# 11 comparte bibliotecas importadas y evita los análisis repetidos. 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 los grafos de bibliotecas importadas que cumplan los requisitos entre proyectos que utilicen 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 de proyecto, los proveedores de tipos, los ensamblados de varios módulos y los cierres de dependencias ambiguos. Las importaciones de .NET Framework ya se compartían.
La solicitud de incorporación de cambios que implementa midió la memoria retenida después de comprobar todos los proyectos y mantenerlos cargados. La carga de trabajo de ReSharper.FSharp, compuesta por diez proyectos, consumió 1547,2 MB sin este uso compartido y 1002,2 MB con él. El consumo de memoria de la carga de trabajo de la solución del compilador varió tan solo un 0,1 %. Estos resultados corresponden a experimentos específicos de este cambio y no representan un ahorro universal al actualizar. 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. El tamaño del montón retenido, el volumen de asignaciones de memoria y la memoria del proceso son métricas diferentes; no sume los resultados de estos experimentos, ya que se solapan.
Análisis y navegación del editor
Las siguientes mejoras se aplican a diferentes capas:
| Component | Trabajo evitado o delimitado |
|---|---|
| diagnósticos de Visual Studio | Reutiliza los diagnósticos de documentos sin modificar, teniendo en cuenta las versiones del texto y del proyecto, las rutas de acceso y las opciones. Está destinada a evitar análisis inactivos repetidos, no a reutilizar indiscriminadamente 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. Utilice Ir a definición para las firmas de metadatos generadas; Inspeccionar definición se limita a 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 lenguaje; el paralelismo no permite establecer dependencias de elementos definidos posteriormente.
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.