Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. .NET (Core and Framework)
  4. Array handling

Array handling

Scheduled Pinned Locked Moved .NET (Core and Framework)
csharpquestioncssdata-structures
26 Posts 4 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R Robert Rohde

    Hmmm... I've tested some constellations. As far at it goes to GetLength Im totally right. Caching the length makes it by far faster. For the normal Length property its a bit more complicated. Brad is true if the arrays is declared locally. If its a field member the cached version will still be a bit faster (about 15%). Seems to be hard to give some general hints on thic topic. Its mostly like Brad stated: "The lesson here is more along the lines of measure, measure, measure when you are doing perf work"

    D Offline
    D Offline
    DavidNohejl
    wrote on last edited by
    #17

    Robert Rohde wrote: Seems to be hard to give some general hints on thic topic. Its mostly like Brad stated: "The lesson here is more along the lines of measure, measure, measure when you are doing perf work" I agree. David Never forget: "Stay kul and happy" (I.A.)
    David's thoughts / dnhsoftware.org / MyHTMLTidy

    S 1 Reply Last reply
    0
    • R Robert Rohde

      Hmmmm... Ive tested exactly the code you posted and on my machine the relese mode version cut down the time needed to nearly the half. Have you tested it within VS or standalone? Check that the 'optimize' flag is set to true, 'check for arithmetic overflow' to false and 'generate debug info' also to false. But I think I have found something to increase the speed of the algorithm itsself: If I get it right you loop through all columns and in that loop through all rows. Then you sum up all values within this window. One big part is summing up the values within this window. If you imagine all those windows in a chart you can imagine that they all overlap each other. Thus you are summing up the same values some dozens times. My suggestion would be to sum up the values for the needed rows for all columns at once before processing a line. This way you dont have to sum all values within the window but only the prepared column sums. The same is probably possible for the variance. I hope this was somehow clear. If not I'll probably implement it myself when I have some minutes free :). Btw: Do You only work with integers? Are those matrix values calculated for only one color chanel (red, green , blue) or is really the complete RGB-value stored? If latter then summing up those values could easily overflow an integer variable :confused:

      S Offline
      S Offline
      sarabjs
      wrote on last edited by
      #18

      Great find! I've made the changes you'd suggested in my algorithm (to avoid repeatedly summing up columns in overlapping windows), and have been able to shed over 1 second! The release mode however is still not giving much improvement. The 'optimize' flag is true and 'check for arithmetic overflow' and 'generate debug info' are both set to false. I must mention that the code I had posted is only a small section of my entire procedure. On my end, I'm processing the input image through a series of functions(/filters), each of which update pixel values depending upon the environments and are similar to the extract in my previous post. Currently, the entire procedure takes an average of ~ 2.4 seconds for a set of 14 test pictures in both Debug and Release modes. Also, am only working with integers. The input images are 8-bit grayscale images, so these integers are only between 0 and 255. Thanks...

      R 1 Reply Last reply
      0
      • D DavidNohejl

        What I mean is direct access to array items using poiters. Here is where I saw it : http://blog.vyvojar.cz/tomas/archive/2004/12/22/2728.aspx[^] Unfortunately i's in czech language, however code should be readable and fuction name says it all :) David Never forget: "Stay kul and happy" (I.A.)
        David's thoughts / dnhsoftware.org / MyHTMLTidy

        S Offline
        S Offline
        sarabjs
        wrote on last edited by
        #19

        I'm already using pointers + unsafe code to convert the input image to a pixel matrix, and to reconvert the processed matrix back to an image. I don't see using pointers throughout my code providing much improvements since most of my operations are basic mathematical operations which I perform on the integer matrix. Besides, a pixel map resembles the image more than the Bitmap data, which is a linear list of pixel values in the input image. I often need to analyze 2-dimensional "windows" around each pixel which is simpler to do in a 2-dimensional map than in a linear data structure. As for now, the methods suggested by Robert have given some improvements. I'll look into pointers again - am just not very familiar with their use at this point. Thanks...

        1 Reply Last reply
        0
        • D DavidNohejl

          Robert Rohde wrote: Seems to be hard to give some general hints on thic topic. Its mostly like Brad stated: "The lesson here is more along the lines of measure, measure, measure when you are doing perf work" I agree. David Never forget: "Stay kul and happy" (I.A.)
          David's thoughts / dnhsoftware.org / MyHTMLTidy

          S Offline
          S Offline
          sarabjs
          wrote on last edited by
          #20

          I guess... Though as far as my requirements are concerned, I don't need to use getLength etc. since the dimensions of the pixel matrix I'm using remain the same throughout.

          1 Reply Last reply
          0
          • S sarabjs

            Great find! I've made the changes you'd suggested in my algorithm (to avoid repeatedly summing up columns in overlapping windows), and have been able to shed over 1 second! The release mode however is still not giving much improvement. The 'optimize' flag is true and 'check for arithmetic overflow' and 'generate debug info' are both set to false. I must mention that the code I had posted is only a small section of my entire procedure. On my end, I'm processing the input image through a series of functions(/filters), each of which update pixel values depending upon the environments and are similar to the extract in my previous post. Currently, the entire procedure takes an average of ~ 2.4 seconds for a set of 14 test pictures in both Debug and Release modes. Also, am only working with integers. The input images are 8-bit grayscale images, so these integers are only between 0 and 255. Thanks...

            R Offline
            R Offline
            Robert Rohde
            wrote on last edited by
            #21

            So you are now relatively close to your goal... You say you are working on images. Where does the data come from? Do you convert a Bitmap into a matrix, do your calculations and then recreate the image? If yes you could instead work directly (unsafe) on the bitmap data with the LockBits function from the Bitmap. Its a bit complicated (I don't like pointer handling) but its worth the try.

            S 1 Reply Last reply
            0
            • R Robert Rohde

              So you are now relatively close to your goal... You say you are working on images. Where does the data come from? Do you convert a Bitmap into a matrix, do your calculations and then recreate the image? If yes you could instead work directly (unsafe) on the bitmap data with the LockBits function from the Bitmap. Its a bit complicated (I don't like pointer handling) but its worth the try.

              S Offline
              S Offline
              sarabjs
              wrote on last edited by
              #22

              I pick the data from the image using the BitmapData object, copy all pixel values to the 2-dimensional array, process this array and finally copy the values back to the memory recreating the image. I don't have much experience with pointers either :sigh:, and am avoiding using them extensively 'cause the using the bitmap data directly seems more complicated since the pixels are placed linearly in the memory - whereas I need to analyze 2-dimensional windows (hence the more suitable pixel map). Besides, I'm not even sure whether using unsafe code and pointers will provide a major breakthrough (although even a not so major breakthrough is acceptable for my case), since most of my processing comprises simple mathematical operations.

              R 1 Reply Last reply
              0
              • S sarabjs

                I pick the data from the image using the BitmapData object, copy all pixel values to the 2-dimensional array, process this array and finally copy the values back to the memory recreating the image. I don't have much experience with pointers either :sigh:, and am avoiding using them extensively 'cause the using the bitmap data directly seems more complicated since the pixels are placed linearly in the memory - whereas I need to analyze 2-dimensional windows (hence the more suitable pixel map). Besides, I'm not even sure whether using unsafe code and pointers will provide a major breakthrough (although even a not so major breakthrough is acceptable for my case), since most of my processing comprises simple mathematical operations.

                R Offline
                R Offline
                Robert Rohde
                wrote on last edited by
                #23

                You are probably right. Probably optimization ends here... :(( Btw: What kind of machine is this running on? Multiprocessor? Hyperthreading? I have have some multithreaded improvements in mind :-D

                S 1 Reply Last reply
                0
                • R Robert Rohde

                  You are probably right. Probably optimization ends here... :(( Btw: What kind of machine is this running on? Multiprocessor? Hyperthreading? I have have some multithreaded improvements in mind :-D

                  S Offline
                  S Offline
                  sarabjs
                  wrote on last edited by
                  #24

                  Single Processor, Single Thread! Let's hear about the improvements...

                  R 1 Reply Last reply
                  0
                  • S sarabjs

                    Single Processor, Single Thread! Let's hear about the improvements...

                    R Offline
                    R Offline
                    Robert Rohde
                    wrote on last edited by
                    #25

                    sarabjs wrote: Single Processor, Single Thread! I think in that case threading would be contraproductive... Sorry but I think I have no further suggestions for improving the performance :((

                    S 1 Reply Last reply
                    0
                    • R Robert Rohde

                      sarabjs wrote: Single Processor, Single Thread! I think in that case threading would be contraproductive... Sorry but I think I have no further suggestions for improving the performance :((

                      S Offline
                      S Offline
                      sarabjs
                      wrote on last edited by
                      #26

                      Nein problemo! :) You've done great.. Thanks for the help... Sarab.

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups