Increase Performance of DevEx WPF Grid - c#

I'm using the DevEx DXGrid (WPF) to show about 2,000 rows of data. I'm using a DataRow Template to get Master-Detail behavior (a new detail grid for each row).
My application responds extremely slow to almost all use input (to the grid). for example:
scrolling
expand/collapse group rows
resize app window
I've contacted DevEx support about this - but they say the solution is non trivial and they are waiting until next major version to 'fix' this.
Have you found any solutions to these problems? I'm hoping there is a way to structure xaml or code to avoid some of the performance problems. I'd be very interested to hear what performance problems you've encountered with the DXGrid and how you solved (or not) them.
thanks.

Indeed, we have changed the way the DXGrid works and it should operate faster. However, this improvement will be only visible in 10.2 and it relates the expanding / collapsing group rows.
If you have problems with scrolling, please post a sample project in the support center showing your performance issues. We will try to improve the control based on your particular situation.

As a general rule of thumb, simply put: the less controls, the faster it will be.
When using the GridControl, you may want to look into using the CellDisplayTemplate and use a very lightweight control to display the content of the cell, and then use the CellEditTemplate for your heavier edit control, as the CellEditTemplate is not is not loaded until the user enters the cell. This becomes very powerful the bigger your GridControl is.
See 3 or 4 for more info on GridControl optimization.

Related

How to make FlowDocumentPageViewer editable?

I am trying to figure out the best way to proceed about paging my text in my UI so that viewer performance does not get impacted while at the same to making sure it is editable.
I have tried using the WPF RichTextBox control which allows for editing but when posting text with length above a certain amount you lose viewing performance and it drags. I also tried using the FlowDocumentPageViewer which gives me the visual performance I want but without the editing.
I want to be able to edit while maintaining visual performance with large quantities of text data posted to my UI. Can a FlowDocumentPageViewer provide that in someway? Or is there another?

How can I efficiently display lots of UIElements in a Panel?

This is the scenario: To display lots of UIElements in a Panel.
Since the number of these controls might be large, I am worried about memory allocation and performance issues.
Visualization is an option, But I hope to be able to do better, because the goal is to just display the content of these controls and there is no need to handle Mouse or Keyboard events.
Is there any way to improve performance in this scenario?
Thanks.
You can just use a normal ListBox to display them, the default panel is the VirtualizingStackPanel which has IsVirtualizing property set to true by default.
VirtualizingStackPanel
Are you currently running into performance issues or preparing for them in case they happen? I would only worry about performance after you've generated and displayed all of your content and noticed problems.
Here is an article with some examples of how to manage large data sets and virtualization: http://www.codeproject.com/Articles/34405/WPF-Data-Virtualization
You say Visualization... I'm assuming maybe you mean Virtualization? If so, then you may or may not know about this website: http://msdn.microsoft.com/en-us/library/cc716879.aspx
Besides Virtualization, they also talk about deferred scrolling. I hope this helps.
I think these should help you:
1. Optimize Layout and Design
2. Optimize Text
All other useful links about performance can be found here: http://msdn.microsoft.com/en-us/library/aa970683.aspx but I think 2 above links will work well in your case.

WPF layout changes (Fill, Full, Snapped)

I am working on a Win8 app destined for the Windows Store. Hurdles I am trying to overcome is how to deal with the different ways an app can be displayed.
Currently, my main pages is a LayoutAwarePage so it has logic to handle different visual states. However, my question is more how to make my page render differently depending on its state.
I thought, initially, that you basically created a layout for each state that the application supports. But it seems like the VisualStateManager portion of the XAML is just an area where you make piecemeal modifications to the design (hide an element, change an alignment).
I am working with a grid that has many columns and rows to organize my controls and it looks great in fullscreen. However, this doesn't work at all in the snapped state, as most of my controls become hidden off screen. I could certainly add a ScrollViewer control, but this is basically a hack and a usability nightmare for a user.
Thanks for any insight!
It might be that your app doesn't lend itself to snapped view. You are allowed to simply display a message / image that states this. Alternatively, consider just showing the columns that are most important.
The standard MS way seems to be to replace horizontal oriented controls with vertical ones - maybe a listview or something would look better. You'll probably find your code easier to read if you have one control for snapped and another for full screen.
Not exactly related to your question, but Blend works very well with XAML to allow you to manipulate the grid or show the relevant control.
Here is a very good guide from Jerry Nixon.
http://blog.jerrynixon.com/2012/12/walkthrough-implementing-snapview-in.html

How can I create my own ListView UserControl?

Ok so I have a table cell that I would like to use in this custom ListView UserControl, so I was wondering how exactly do you set one of these up and how do you call the cells to be my custom ones? Any help would be greatly appreciated :)
The ListView control is a b**ch, so if you are really planning to get your hands dirty with it, be prepared for a great big mess.
If you would prefer a ready-made solution, I will point you to this one: CodeProject - ObjectListView
We at ComponentOwl made custom ListView control called Better ListView. (Or maybe you can be interested in the freeware edition Better ListView Express).
You can also try the suggested ObjectListView.
The ListView control is -very- complex and contains myriads of little features all we had to implement. So I recommend you to look for a finished 3rd party control, since coding this is challenging (the BetterListView hit 40K lines of code only to meet requirements of ListView, now having about 80K+ lines of code!)

WinForms Invoke/BeginInvoke

I have a C# win form where I read a file and show lines in a datagridview. Everything works fine.. and I use delegate and Invoke for displaying the lines as they are being read. It also shows a progressbar and does some other stuff like calculating line length and parse the lines to extract certain fields from each line.
Just curious, if anybody has tried this kind of implementation. Currently my app reads a 250MB file (having ~ 12000 lines) in little over 3 minutes (Win 7 32bit/celeron 2.66Ghz/4GB). I was wondering if it is possible to reduce the time - more of like by changing the way I implemented it.
Well, you're quite right to have second thoughts about this. What's probably the toughest read possible, War and Peace by Tolstoy, has roughly half a million words. What you're dumping to the screen is a hundred times more. It doesn't really matter how long it takes to put this much info on the screen, it will take your user a wholeheckofalot longer to even scroll through it.
I personally hesitate to ever put anything more than, oh, 50 items in a list. 100 tops. Beyond that, it becomes sheer torture for a human being.
To get there, allow your user to filter content, gradually drilling down in the huge result set to a relevant item. Exactly what that ought to look like is not clear from your question. Think about it for a bit, I'm sure you'll come up with something.
Ok...I love these questions. Why are you showing a user 250mbs of data in a data grid? There is NO WAY that an end user can process understand 250mbs of data in a grid. If the end user is pressuring you for this feature you need to address it with them from a "this is a bad idea" standpoint. Performance problems can usually be solved in most cases by educating the user. :-D
First, you need not load the entire file, nor display it. You can load portions of it for display. i.e. in the grid, you cannot show the enire file anyway, the screen is only so big. Consider loading only what you display (plus a few extra lines for smooth scrolling) and load the rest on demand as the user is scrolling through the content. The user will be unaware that the file is only partially loaded.
Even nicer would be if you have some logical grouping, in a book you could display the chapters, in a financial type application, either by account or time period.
Maybe something like VirtualMode can helps you:
Virtual mode is designed for use with very large stores of data. When the VirtualMode property is true, you create a DataGridView with a set number of rows and columns and then handle the CellValueNeeded event to populate the cells. Virtual mode requires implementation of an underlying data cache to handle the population, editing, and deletion of DataGridView cells based on actions of the user. For more information about implementing virtual mode, see How to: Implement Virtual Mode in the Windows Forms DataGridView Control.
P.S. About performance: no one except profiling tool can't helps you to solve any performance-related problems.

Categories