Fast Forms - Tricks of the Trade PLEASE
-
I am desparately trying to get my apps forms to load acceptably fast before release to users. I thought C# was suppose to be comparable to C++ in speed? It seems more like VB6 is a better comparison! I wish i knew the real deal before starting this project! I was lulled into a false sense of security when i kept reading about miracles on the internet about dramatic increases in performance with little tweaks. I thought a solution would come along sooner or later. I am developing in NET 1.1. My computer is 1GHz Sony Laptop Windows 2K. Description of my forms: Combination of custom controls, forms, and user controls. By using panels and user controls as subforms, forms are up to 3 levels deep. Form have about 10-30 controls each on them. Controls used are stock labels, buttons, checkboxes, radio buttons, textboxes. Some forms have customized listviews and combos inherited from stock controls. All forms have button icons. What i have done: I have used the double buffering control style with AllPaintingInWmPaint and UserPaint in the forms, user controls and custom controls where i could. Code is in the constructor. I am using SuspendLayout, ResumeLayout to wrap control setup code that is outside the InitializeComponent method. It is called either in the constructor or Form Load. I tried precompiling assemblies. No performance gain there. Double buffering slowed form load down but improved the sluggish drawing. Sluggish drawing persists. To describe, drawing of forms seems to be done in pieces, not all at once. Overall, the perception of loading has improved a notch, BUT NO MORE THAN A NOTCH! :( I will note that once the form loads the first time, future access during program excution is fast. It seems form graphics are cached by the CLR. But that first time loading! Ouch! What can i do?
-
I am desparately trying to get my apps forms to load acceptably fast before release to users. I thought C# was suppose to be comparable to C++ in speed? It seems more like VB6 is a better comparison! I wish i knew the real deal before starting this project! I was lulled into a false sense of security when i kept reading about miracles on the internet about dramatic increases in performance with little tweaks. I thought a solution would come along sooner or later. I am developing in NET 1.1. My computer is 1GHz Sony Laptop Windows 2K. Description of my forms: Combination of custom controls, forms, and user controls. By using panels and user controls as subforms, forms are up to 3 levels deep. Form have about 10-30 controls each on them. Controls used are stock labels, buttons, checkboxes, radio buttons, textboxes. Some forms have customized listviews and combos inherited from stock controls. All forms have button icons. What i have done: I have used the double buffering control style with AllPaintingInWmPaint and UserPaint in the forms, user controls and custom controls where i could. Code is in the constructor. I am using SuspendLayout, ResumeLayout to wrap control setup code that is outside the InitializeComponent method. It is called either in the constructor or Form Load. I tried precompiling assemblies. No performance gain there. Double buffering slowed form load down but improved the sluggish drawing. Sluggish drawing persists. To describe, drawing of forms seems to be done in pieces, not all at once. Overall, the perception of loading has improved a notch, BUT NO MORE THAN A NOTCH! :( I will note that once the form loads the first time, future access during program excution is fast. It seems form graphics are cached by the CLR. But that first time loading! Ouch! What can i do?
Startup time is always expensive in a managed environment. At many points .Net performance is comparable to C++ performance but startup time definitely isn't. First of all you could use NProf[^] to profile you startup phase. Second have a look at nGen. It generates native images of your assemblies and stores them. Thus on startup the CLR doesn't have to compile everything. Third... well depends on your form. Having too many controls (also nested) might naturally slow down performance. I can't give you any good advice on this because therefore I would need to know some details.
-
I am desparately trying to get my apps forms to load acceptably fast before release to users. I thought C# was suppose to be comparable to C++ in speed? It seems more like VB6 is a better comparison! I wish i knew the real deal before starting this project! I was lulled into a false sense of security when i kept reading about miracles on the internet about dramatic increases in performance with little tweaks. I thought a solution would come along sooner or later. I am developing in NET 1.1. My computer is 1GHz Sony Laptop Windows 2K. Description of my forms: Combination of custom controls, forms, and user controls. By using panels and user controls as subforms, forms are up to 3 levels deep. Form have about 10-30 controls each on them. Controls used are stock labels, buttons, checkboxes, radio buttons, textboxes. Some forms have customized listviews and combos inherited from stock controls. All forms have button icons. What i have done: I have used the double buffering control style with AllPaintingInWmPaint and UserPaint in the forms, user controls and custom controls where i could. Code is in the constructor. I am using SuspendLayout, ResumeLayout to wrap control setup code that is outside the InitializeComponent method. It is called either in the constructor or Form Load. I tried precompiling assemblies. No performance gain there. Double buffering slowed form load down but improved the sluggish drawing. Sluggish drawing persists. To describe, drawing of forms seems to be done in pieces, not all at once. Overall, the perception of loading has improved a notch, BUT NO MORE THAN A NOTCH! :( I will note that once the form loads the first time, future access during program excution is fast. It seems form graphics are cached by the CLR. But that first time loading! Ouch! What can i do?