Archives annuelles: 2009

2 articles

Jouer avec FindFirstFile et FindNextFile

Énumération des fichiers dans .NET est facile. Tout le monde connaît la méthode GetFiles et vous pouvez être tenté d’écrire du code comme ceci :
    var files = Directory.GetFiles(@"c:windowssystem32", "*.dll");
    foreach (var file in files)
    {
        Console.WriteLine(file);
    }

Mais si vous regardez de plus près, vous remarquerez que cette méthode retourne un tableau de chaînes. Cela pourrait être problématique si le répertoire que vous recherchez contient beaucoup de fichiers. La méthode se bloque jusqu’à ce qu’il effectue une recherche et une fois qu’il termine il va charger tous les résultats dans la mémoire. Il serait beaucoup mieux si il vient de rentrer un IEnumerable. C’est exactement ce que la méthode EnumerateFiles dans .NET 4.0. Malheureusement dans .NET 3.5 il n’y a rien pour le travail.

Dans ce post, je vais montrer comment implémenter cette fonctionnalité en utilisant les fonctions FindFirstFile et FindNextFile .

Poursuivre la lecture

Manipulations de matrices avec du code non sécurisé

La classe Matrix

Dans cet article nous allons comparer 2 méthodes qui traitent de multiplication de matrices en .Net | C#.

Nous commençons par la définition de la classe matrice :  Matrix

    class Matrix
    {
        private readonly double[,] _matrix;
        public Matrix(int dim1, int dim2)
        {
            _matrix = new double[dim1, dim2];
        }

        public int Height { get { return _matrix.GetLength(0); } }
        public int Width { get { return _matrix.GetLength(1); } }

        public double this[int x, int y]
        {
            get { return _matrix[x, y]; }
            set { _matrix[x, y] = value; }
        }
    }

Multiplications de matrices

Voici le premier algorithme de multiplication de matrice qui réalise l’opération de manière standard.

    public static Matrix NaiveMultiplication(Matrix m1, Matrix m2)
    {
        Matrix resultMatrix = new Matrix(m1.Height, m2.Width);
        for (int i = 0; i < resultMatrix.Height; i++)
        {
            for (int j = 0; j < resultMatrix.Width; j++)
            {
                resultMatrix[i, j] = 0;
                for (int k = 0; k < m1.Width; k++)
                {
                    resultMatrix[i, j] += m1[i, k] * m2[k, j];
                }
            }
        }
        return resultMatrix;
    }

Voici le second algorithme qui réalise la même chose, mais cette fois en utilisant du code non sécurisé (unsafe)

Poursuivre la lecture