2010-09-06 18 views
9

Una gran cantidad de comprobación de límites de matriz ralentiza la velocidad, esto es especialmente cierto para las matrices 2D. ¿Hay alguna manera de escribir bloques de código inseguros en F #?¿F # tiene una sintaxis equivalente al bloque "inseguro" de C#

+2

No es algo que haga todos los días, pero F # le permite escribir CLR literales en el código, apuesto a que hay una manera de hacer operaciones de puntero inseguras a través de él. – Juliet

Respuesta

9

No soy un programador F# pero, por lo que puedo ver, no parece tener la palabra clave unsafe.

Posiblemente pueda obtener un aumento de rendimiento al transformar la matriz 2D en una matriz unidimensional.

Consejo 5: Hasta que este derecho, que sugeriría que los usuarios de .NET hacen lo que los programadores numéricos muchos C++ hacen: escribir una clase para implementar su matriz n-dimensional. Esto sería representado como una matriz unidimensional, y los accesadores relevantes serían convertir n índices en 1 a través de multiplicaciones apropiadas. Nosotros casi con certeza no eliminaríamos la comprobación de límites en el arreglo de 1-d, , pero al menos solo haríamos un control.

Array Bounds Check Elimination in the CLR

+0

El artículo de MSDN que señala hace una lectura realmente interesante :-) –

+0

Yo también lo pensé y dado que se trata del CLR, debería ser independiente del idioma. –

1

No en esta versión y dudo que alguna vez lo añaden.

3

Consulte here para obtener algunas formas de que el compilador elimine la verificación de límites por usted. Básicamente, necesita escribir sus loops de tal forma que el compilador sepa que sus índices estarán dentro de los límites. Si sabe que estará dentro de los límites, cuando ejecutas el modo de lanzamiento sin depuración, el compilador JIT eliminará los controles de límites por ti.

Cuestiones relacionadas