Keresés

Új hozzászólás Aktív témák

  • joysefke

    veterán

    válasz DrojDtroll #9337 üzenetére

            public static int[,] Get4mIntArrBufferedSpan(string fileName)
            {
                var sw = new Stopwatch();
                uint heigth = 2048;
                uint width = heigth;
                var result = new int[heigth, width];
                var buffSize = sizeof(ushort) * heigth;
                var buff = new byte[buffSize];
                using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None, bufferSize: 1024 * 1024))
                {
                    sw.Start();
                    for (int w = 0; w < width; w++)
                    {
                        int chunk = 0;
                        while (chunk < buffSize)
                            chunk += fs.Read(buff, chunk, (int)buffSize - chunk);
                        
                      var shortArr = MemoryMarshal.Cast<byte, ushort>(buff);
                        for (int h = 0; h < heigth; h++)
                          result[h, w] = shortArr[h];
                    }
                    sw.Stop();
                    Console.WriteLine($"{nameof(Get4mIntArrBufferedSpan)} took {sw.ElapsedMilliseconds}ms");
                }
                return result;
            }

    Nekem a fenti kód pontosan ugyanazt az eredmény tömböt dobja ki mint a te első metódusod. A különbség annyi, hogy a itt while ciklus megpróbál egyszerre 4096byteot (2048db ushort) kiolvasni a streamből, a kiolvasott byte tömböt castolja ushort-tömbre azzal pedig feltölti egy oszlopodat.

    Szóval itt is rossz a tömb bejárási sorrendje, de a Stream.Read() metódus úgy tűnik, hogy ennyivel hatékonyabb, mint egyenként ushortokat olvasgatni. (nálam pontosan duplázódott a sebesség)

    A fenti kódban ha a mátrix bejárási sorrendje "normalizálódna" akkor további 3x lenne gyorsabb. ==> tehát igen, itt a processzor fogja vissza a fájlműveletet :)

    Ebben az esetben lenne értelme egyszerre 2048db elemnél többet is olvasni. Az még dobna rajta.

Új hozzászólás Aktív témák

Hirdetés