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. C#
  4. setting large amount of text in textbox

setting large amount of text in textbox

Scheduled Pinned Locked Moved C#
cssperformancehelptutorialquestion
18 Posts 6 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.
  • A althamda

    I'm not too sure about putting text into a textbox quicker, but if you definately know that every 2nd character is a letter, then using text[i] = (char)((int)text[i] - 32); is quicker than using text[i] = char.ToUpper(text[i]);

    V Offline
    V Offline
    V 0
    wrote on last edited by
    #7

    if(char.IsLetter(text[i])){
    text[i] = (char)((int)text[i] - 32); //char.ToUpper(text[i]);
    }

    gained me 1 second thanks :-) (this is actually kinda fun ;-), I learned a lot here... ;P)

    V.
    Stop smoking so you can: Enjoy longer the money you save. Moviereview Archive

    A 1 Reply Last reply
    0
    • V V 0

      if(char.IsLetter(text[i])){
      text[i] = (char)((int)text[i] - 32); //char.ToUpper(text[i]);
      }

      gained me 1 second thanks :-) (this is actually kinda fun ;-), I learned a lot here... ;P)

      V.
      Stop smoking so you can: Enjoy longer the money you save. Moviereview Archive

      A Offline
      A Offline
      althamda
      wrote on last edited by
      #8

      You could even call your progress bar update fewer times than you are, with a 20 meg file you're currently calling the progress bar update more than 20,000 times. If this takes 10 secs to go through the for loop, that's 2000 progress bar updates per second, bit of overkill there.

      1 Reply Last reply
      0
      • V V 0

        Guys, A few days ago I asked about an assignment we had to do here at work. convert "aabb" to "aAbB" and set it to the textbox as quickly as possible. I think the conversion itself is very quick, reading in and converting in 1 or 2 seconds, but setting the entire thing in the texbox takes me another 10 seconds! (20 MB file) I've read about the AppendText property and tried to set my characterarray to the box inside my loop, but so far the fastest results I got where form txtbox_result.Text = new string(text); where text = char []. Any ideas on how to speed this up? (Suspend/resumelayout don't help either) thanks ! PS: here's tho code I got so far:

        		    starttime = DateTime.Now;
        		    reader = new System.IO.StreamReader(openfiledlg.FileName);
        		    char \[\] text = reader.ReadToEnd().ToCharArray();
        		    reader.Close();
        		    difference = DateTime.Now - starttime;
        		    lbl\_result.Text = "File read: " + difference.TotalMilliseconds + " milliseconds.";
        		    lbl\_result.Refresh();
        		    pb\_conversion.Maximum = text.Length;
        		    //Starting from 1 will gain me 1 character less to analyze.
        		    //don't update the progress bar every iteration.
        		    int i2 = 0;
        		    for(int i = 1; i < text.Length; i+=2){
        		        text\[i\] = char.ToUpper(text\[i\]);
        		        if(++i2 == 1000){
        		            i2 = 0;
        		            pb\_conversion.Value = i;
        		        }											//end if
        		    }												//end for
        		    difference = DateTime.Now - starttime;
        		    lbl\_result.Text = "conversion: " + difference.TotalMilliseconds + " milliseconds.";
        		    lbl\_result.Refresh();
        		    pb\_conversion.Value = pb\_conversion.Maximum;
        		    txtbox\_result.SuspendLayout();
        		    txtbox\_result.Text = new string(text);
        		    txtbox\_result.ResumeLayout();
        		    difference = DateTime.Now - starttime;
        		    lbl\_result.Text = "Done in: " + difference.TotalMilliseconds + " milliseconds.";
        

        V. I found a living worth working for, but haven't found work worth living for.

        A Offline
        A Offline
        althamda
        wrote on last edited by
        #9

        Instead of using txtbox_result.Text = new string(text); Do this txtbox_result.AppendText(new string(text));

        V 1 Reply Last reply
        0
        • A althamda

          Instead of using txtbox_result.Text = new string(text); Do this txtbox_result.AppendText(new string(text));

          V Offline
          V Offline
          V 0
          wrote on last edited by
          #10

          tnx, good idea, but didn't help. :)

          V.
          Stop smoking so you can: Enjoy longer the money you save. Moviereview Archive

          A 1 Reply Last reply
          0
          • V V 0

            tnx, good idea, but didn't help. :)

            V.
            Stop smoking so you can: Enjoy longer the money you save. Moviereview Archive

            A Offline
            A Offline
            althamda
            wrote on last edited by
            #11

            I can process a 20 meg file and display it with appendtext in 4 seconds.

            V 1 Reply Last reply
            0
            • A althamda

              I can process a 20 meg file and display it with appendtext in 4 seconds.

              V Offline
              V Offline
              V 0
              wrote on last edited by
              #12

              mine is, with ngen and Highest priority thread about 16 seconds. Maybe you have more memory and faster cpu? (Centrino 2,13GHz, 2Gb memory)

              V.
              Stop smoking so you can: Enjoy longer the money you save. Moviereview Archive

              A 1 Reply Last reply
              0
              • V V 0

                mine is, with ngen and Highest priority thread about 16 seconds. Maybe you have more memory and faster cpu? (Centrino 2,13GHz, 2Gb memory)

                V.
                Stop smoking so you can: Enjoy longer the money you save. Moviereview Archive

                A Offline
                A Offline
                althamda
                wrote on last edited by
                #13

                Here's my code. I'm using a standard textbox.

                		textBox2.Clear();	
                			DateTime dt = DateTime.Now;
                			StreamReader sr = new StreamReader(@"C:\test\test.txt");
                			char[] c = sr.ReadToEnd().ToCharArray();
                			progressBar1.Maximum = c.Length;
                
                			for (int i = 0; i < c.Length; i += 2)
                			{
                				if ((int)c[i] >= 97 && (int)c[i] <= 122)
                					c[i] = (char)((int)c[i] - 32);
                
                				if (i % 10000 == 0)
                					progressBar1.Value = i;
                			}
                
                			textBox2.AppendText(new string(c));
                
                			MessageBox.Show((DateTime.Now.Ticks - dt.Ticks).ToString());
                

                Note that a textbox does only store 32k of text, but if your assignment says you just have to fill a textbox, then you are only doing what it says...

                V 1 Reply Last reply
                0
                • A althamda

                  Here's my code. I'm using a standard textbox.

                  		textBox2.Clear();	
                  			DateTime dt = DateTime.Now;
                  			StreamReader sr = new StreamReader(@"C:\test\test.txt");
                  			char[] c = sr.ReadToEnd().ToCharArray();
                  			progressBar1.Maximum = c.Length;
                  
                  			for (int i = 0; i < c.Length; i += 2)
                  			{
                  				if ((int)c[i] >= 97 && (int)c[i] <= 122)
                  					c[i] = (char)((int)c[i] - 32);
                  
                  				if (i % 10000 == 0)
                  					progressBar1.Value = i;
                  			}
                  
                  			textBox2.AppendText(new string(c));
                  
                  			MessageBox.Show((DateTime.Now.Ticks - dt.Ticks).ToString());
                  

                  Note that a textbox does only store 32k of text, but if your assignment says you just have to fill a textbox, then you are only doing what it says...

                  V Offline
                  V Offline
                  V 0
                  wrote on last edited by
                  #14

                  thanks, i'll try this tomorrow. Last day for submitting our tries :-). Maybe I'll post in the lounge next week how I did (or we did ;P)

                  V.
                  Stop smoking so you can: Enjoy longer the money you save. Moviereview Archive

                  1 Reply Last reply
                  0
                  • A althamda

                    I'm not too sure about putting text into a textbox quicker, but if you definately know that every 2nd character is a letter, then using text[i] = (char)((int)text[i] - 32); is quicker than using text[i] = char.ToUpper(text[i]);

                    M Offline
                    M Offline
                    mav northwind
                    wrote on last edited by
                    #15

                    Unfortunately this will only work for ANSI characters, so you're actually introducing a bug in order to gain a few ms... Not a good deal IMHO.

                    Regards, mav -- Black holes are the places where God divided by 0...

                    A 1 Reply Last reply
                    0
                    • A althamda

                      I'm not too sure about putting text into a textbox quicker, but if you definately know that every 2nd character is a letter, then using text[i] = (char)((int)text[i] - 32); is quicker than using text[i] = char.ToUpper(text[i]);

                      L Offline
                      L Offline
                      lmoelleb
                      wrote on last edited by
                      #16

                      I am not surprised it is faster as ToUpper actually converts to upper case. :) Subtracting 32 works in a limited subset of letters (the A-Z range and a few others), and it ignores cultural settings. Sure it might be fine enough for a "just for the fun of it" project like this, but unfortunately people end up beleiving they actually can convert using code like this in real projects as well. :(

                      1 Reply Last reply
                      0
                      • M mav northwind

                        Unfortunately this will only work for ANSI characters, so you're actually introducing a bug in order to gain a few ms... Not a good deal IMHO.

                        Regards, mav -- Black holes are the places where God divided by 0...

                        A Offline
                        A Offline
                        althamda
                        wrote on last edited by
                        #17

                        It's not introducing a bug, if you had read the original thread from a few days ago you'd realise that this is what the OP wanted - 'convert "aabb" to "aAbB" and set it to the textbox as quickly as possible'. Thanks.

                        M 1 Reply Last reply
                        0
                        • A althamda

                          It's not introducing a bug, if you had read the original thread from a few days ago you'd realise that this is what the OP wanted - 'convert "aabb" to "aAbB" and set it to the textbox as quickly as possible'. Thanks.

                          M Offline
                          M Offline
                          mav northwind
                          wrote on last edited by
                          #18

                          Ok, if it's really just A's and B's then it'll work of course. I guess I'm already going on auto when seeing someone performing integer maths on characters :)

                          Regards, mav -- Black holes are the places where God divided by 0...

                          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