Schnellste Array-Adressierung

Ich bin mit einem Bild-Analyse-code auf ein array zum speichern von Informationen über das Bild. Leider ist der code sehr schwer und dauert durchschnittlich 25s laufen über einen einzigen frame. Das Hauptproblem, das ich sehe, ist die array-Adressierung. Welche ist die am schnellsten zu laufen, durch ein 2d-array und gibt es überhaupt Unterschiede in der

horizontale, dann vertikale

for (int y = 0; y < array.Length; ++y)
    for (int x = 0; x < array[].Length; ++x)
        //Code using array[y][x]

und vertikaler dann horrizontal?

for (int x = 0; x < array[].Length; ++x)
    for (int y = 0; y < array.Length; ++y)
        //Code using array[y][x]

Darüber hinaus habe ich versucht zu vermeiden die direkte Adressierung und die Verwendung von Zeigern statt.

for (int y = 0; y < array.Length; ++y)
    int* ptrArray = (int*)array[0];
    for (int x = 0; x < array[].Length; ++x, ++ptrArray)
        //Code using ptrArray for array[y][x]

oder

for (int x = 0; x < array[].Length; ++x)
    int* ptrArray = (int*)array[0];
    for (int y = 0; y < array.Length; ++y, ptrArray += array[].Length)
        //Code using ptrArray for array[y][x]

Jede Hilfe wird sehr geschätzt.
Max

  • Ich sollte erwähnt haben, dass das array ist eigentlich ein BitmapData für bitmap-Farbe-Zuordnung :/ sry...
  • So, Sie sind schon pinning Speicher?
  • Haben Sie versucht, die Codierung bis jede Lösung und Messen, wie lange es dauert? Geben Sie die genaue Antwort. Aber wenn ich raten müsste, würde ich sagen, dass die Optionen 3 und 4 sind wohl etwas schneller als die Optionen 1 und 2.
  • Wenn man 25s für ein einzelnes Bild, die code-Stücke, die Sie geschrieben sind eindeutig nicht der begrenzende Teile.
  • Ihr größtes problem ist die Verwendung eines multi-dimensionale jagged array. Könntest du diesen in einen single-dimensionale null-basiertes array verwenden?
  • Ich denke, deine Geschwindigkeit bei der Bildverarbeitung hängt davon ab, WIE Sie ihn verarbeiten. Also, was machst du in loops?
  • Ihre aktuelle code ist nicht stabil, btw - du hast nicht behoben, das array vor der Einnahme einen Zeiger
  • Ich denke, das problem hier ist nicht die Schleifen, sondern: die //Code using {blah}. Wenn Sie nichts tun außer den loops, wie lange dauert es? Wir können nicht raten, auf {blah} ohne zu sehen {blah}
  • Der code in Schleifen kann nicht optimiert werden, viel, denn es ist so leicht, wie es sein wird (AForge). Das problem war das zählen, statt nach unten. Es reduziert meine volle computational Geschwindigkeit zu <4s 🙂

InformationsquelleAutor Max Z. | 2011-12-13
Schreibe einen Kommentar