Telerik vs. Infragistics for Silverlight - silverlight

Yes, this is certainly a duplicate question, but I wanted to get some fresh takes.
My impression is that Telerik is a much more complete suite, but I'm really really turned off by the responsiveness of their controls. It just seems "clunky" in terms of responsiveness (I have a very fast computer and video card). Scrolling in a grid and transitions chunk, even in their latest demos where they claim to have good performance. I do like that their WPF suite matches their SL one in terms of API.
Infragistics has fewer controls and less theming possibilities, but their controls are very responsive. Scrolling in a grid is fluid, as are their combo menus and all the other controls.
I checked out ComponentOne and their controls seem analogous to Telerik's in terms of the points mentioned above but are a little less "pretty".
Any thoughts from other users of these suites? Basically, what I'm looking for is a suite that will be highly performant and responsive, relatively customizable from a theming standpoint, and have enough functionality to develop a LOB SL application without having to use multiple suites to satisfy the majority of common requirements.

Telerik by far has the slowest (clunky) controls. We've downloaded datagrids from many of the control companies (Infragistics, ComponentOne, Telerik, etc) and found Telerik's to be the slowest as far as loading and refreshing hundreds of thousands to a million rows. I can't speak much for the rest of the controls tho. Testing speed and memory consumption, we found the C1Flexgrid was fastest, followed by Infragistics xamGrid, then Microsofts grid, C1Datagrid and last was Telerik's radGridView.

If you think about this, would you really ever want to load 100's of thousands to 1 million records in a grid or any control for that matter? Well unless you're trying to come up with some marketing fodder?
I don't know of a monitor that could load that many at once to look at. Even if it could, maybe I'm just slow but I can only process them a couple at a time.
What can an average user look at and process. 10 records, maybe 20.
I could see maybe wanting to load a 100 or so and not have to page to get new recors, but thousands or millions? Personally I'm going to require filter capabilities and paging and if I have a developer trying to load 1 million records into a grid, we're going to have to have a sit down because the performance of a grid or any other control is not the issue.
Let's look at a multi billion $ company who has a site and it's sole purpose is to return data to a users. I'm referring to Google. Do a search and you get back around 10 records. I just did a search and got 21,400,00 results. If I don't find what I'm looking for in the first page or two (20 records), I know I didn't filter good enough. I'm not not sifting through a million records.
So that puts your performance back to your logic of retrieving records and giving your users the correct ability to filter down the data they really need at the time.
How fast one grid shows 1.5 million records seems like fodder for "bench racing" and who cares if it's sluggish scrolling because why pull back that many records to start with?
I apologize if I'm missing the point and you're just having fun with bench racing. But I read you are talking about real world, LOB applications and if that's the case then we need to be realistic about the scenarios.
We use the Telerik grid and it performs just fine for real world LOB app. Again though the users we write for can't look at or process 1.5 millions at once nor would they care too.
Also as you're finding out in this thread their support is second to none and I'll take that anyday from a any company we buy a these types of products from over whether they can load a million records in a grid or not. Telerik, Infragistics or whoever.
For anybody serious about real world scenarios and trying to find a quality suite, the first thing to realize is who's on this thread trying to answer questions about their products.

Please have a look at the following demo which binds 1.5 million rows to a grid with sorting and filtering enabled:
http://labs.infragistics.com/silverlight/lobsamples/2010.3/#/Samples/Grid/Performance/GridLargeResultSet
The "Virtual Collection" is another performance feature:
http://labs.infragistics.com/silverlight/lobsamples/2010.3/#/Samples/VirtualCollection/Scrolling/xamGridScrolling
Disclaimer: I am a Technical Evangelist with Infragistics

I suggest you to check the Performance section in our demos for more info about how the grid will perform with large data and/or real-time updates. Here are several examples:
http://demos.telerik.com/silverlight/#GridView/Performance
http://demos.telerik.com/silverlight/#GridView/UIVirtualization
http://demos.telerik.com/silverlight/#GridView/RealTimeUpdate
http://demos.telerik.com/silverlight/#DataVirtualization/FirstLook

Related

Silverlight 4 - Tournament style view (knockout, tree)

I'm trying to create a view in Silverlight that can display rounds in a tournament. At the moment I have a set of grid views side by side and each one shows all the people still in that round of the knockout.
What I am trying to achieve is a view that shows clearly who played who and when their next games. Something similar to the below. I'm just wanting some pointers in the direction of what control I could manipulate enough to achieve this as I am very much new to Silverlight.
If you're looking for components you can tweak to work this way, I would strongly recommend investigating some of the third-party components designed for creating diagrams and/or org charts. Some cost money, but in my experience, the cost of a third-party control is less than the cost of my time to reproduce it myself. Here are some links to investigate:
Free: (Most of these are vertical, but you could tweak them to meet your horizontal layout):
http://www.codeproject.com/KB/cs/Org_Chart_Generator.aspx
http://omourad.blogspot.com/2009/08/silverlight-organization-chart.html
http://www.sharpdevel.com/2009/12/organization-chart-free-control-in.html
Money:
http://nwoods.com/components/silverlight-wpf/goxam-overview.htm (<-- my personal preference)
http://www.mindfusion.eu/diagramlite.html
http://www.syncfusion.com/products/user-interface-edition/silverlight/diagram
Good luck!

Loading a datagrid with large amounts of data in silverlight?

I am breaking up my project in small sections and one of the sections involves loading a grid with possibily lots of records (could be up to 1000s of records in the database).
Ideally I would like some sort of mechanism where as the users scrolls the grid, more data is retrieved.
I have read that certain controls (datapager with RIA) do this but I would like to know how I could implement this myself or do something similiar?
I was thinking about first loading 50 records at a time and when the user gets to scroll near the 50th record, then get another 50 as a start and so on. Not sure how I do this but this does not feel right or whether I should load ids of records in the grid and then get each row to load itself via an async thread but then I am hitting my database for each record?
Thanks
JD.
Sounds like you are describing data virtulization. Xceed seems to be working on a commercial control with this capability but to date have not realeased anything(see Xceed DataGrid for Silverlight Tech Preview! ). For some ideas from the WPF world on doing this you can check out:
Data virtualization
How can I improve on existing WPF data virtualization solutions?
I have just published a couple of articles with some sample code describing how to do stealth paging/data virtualization in silverlight without using any third-party components.
Read the introductory post to find out about the sample, and then follow up with Digging into VirtualCollection.

High density Silverlight charting control

I've been looking into Silverlight charting controls to display a large number of samples, (~10,000 data points in five separate series - ~50k points all up).
I have found the existing options produced by Dundas, Visifire, Microsoft etc to be extremely poor performers when displaying more than a few hundred data points.
I believe the performance issues with existing chart controls is caused by the heavy use of vector graphics.
Ergo one solution would be a client-side chart control that uses the WritableBitmap class to generate a raster chart.
Before I fall too far down the wheel re-invention rabbit hole - has anyone found a third party or OSS control that will manage large numbers of data points on a sparkline?
Check out Visiblox ( http://www.visiblox.com/ ) Charts. I'm working on a telemetry application at the minute which uses three of their charts in the same Silverlight component, plotting about 36,000 points in total, and there is very little slowdown in terms of performance, if any at all.
They have a high performance example on their website here - http://www.visiblox.com/examples/LargeDataSets. I chose to use Visiblox after loooking at the following blog post:
New performance comparison: http://www.visifire.com/blog/2011/12/02/fast-silverlight-charts/
Old performance comparison: http://www.scottlogic.co.uk/blog/colin/2010/12/visiblox-visifire-dynamicdatadisplay-charting-performance-comparison/
My telemetry example is now part of a CodeProject article that I have created, if you want to take a look!
Based on the recommendations here, I have just trialled Visiblox and Infragistics.
Visiblox has a good developer experience, clean APIs, no bloat. While the performance is OK for a few thousand datapoints, performance breaks down as you go into the 100k range. Here's the Visiblox sample with a few thousand points (you can download the sample and just tweak the number of datapoints).
Now, the common argument here is that you should not bind that much data to a chart anyway, but should do some trimming beforehand. I do agree with that, but ideally, I want a chart control that does take care of that for me. Getting Zooming, Panning and all that right are non-trivial tasks and I'd be happy to shell out a few 100$ to get that functionality. It's plain economic common sense to not reinvent the wheel here.
Infragistics certainly gets that right. I can bind a million odatapoints and get smooth peformance. Here's the Infragistics sample.
However, Infragistics installs a lot of junk (a local IIS web app with the samples you can also see online) and besides the (excellent) samples and the code-level documentation, I do miss some high-level introduction to each component and it's individual modules.
Since a lot of people on SO recommend Telerik controls for their clean APIs, Documentation and Developer Support, I did also take a look at their chart control. However, I must admit I find it rather slow (Zooming takes roughly 500-1000ms, which is too long to feel smooth).
Here's the Telerik sample.
Visifire is the fastest chart now. Check out the blog link below.
http://www.visifire.com/blog/2011/12/02/fast-silverlight-charts/
The Chart image says Visifire is 3 to 4x faster than Visiblox..!
Before you start playing around with WritableBitmap on your own take a look at WriteableBitmapEx from René Schulte, he blogs about it here. Awesome stuff.
I don't know of any OSS or 3rd party controls that'll do what you need.
The one case where I've had the need for 100K+ of datapoints, we made it work by keeping it simple. The biggest perf killer was the number of elements within each datapoint. By keeping the element a simple ellipse with a static brush fill the app was rather snappy.
Infragistics claims to be able to handle massive amounts of data in their recently released xamDataChart.
http://www.infragistics.com/dotnet/netadvantage/silverlight/data-visualization/xam-web-data-chart.aspx#Overview
I believe the Telerik sample you are looking for can be found here. It shows large amounts of data that you can actually zoom in/out of. They also have a Server Load "Performance" Demo as well. Here is an example of the Scatter Chart with hundreds of data points.
Have you looked at the Telerik charting controls? Here is a link to one of their demos where they are using 100.000 data points:
http://demos.telerik.com/silverlight/#Chart/Sampling
I should also mention that I have not used the charting controls myself, so I cannot vouch for them. But the demos look good to me.
EDIT:
The link above has gone stale. Here is a link to the latest incarnation of the Telerik charting control They call it ChartView now:
http://demos.telerik.com/silverlight/#ChartView/FirstLook

I have some performance related questions about Silverlight Enterprise app development

I have some performance related questions about SL Enterprise app development.
-We have 10.000 rows binding to an ItemsSource control. (A total of 100.000+ UIElements when databound)
Q1.How to do this binding in another thread? Because Silverlight gets stuck while the binding happens.
Q2.Any other ways to do this that you suggest with the same visual flexibility like we have in an ItemsControl.
-We are pulling a total of 60MB (unzipped binary serialized XML) data from server and letting our SL users use it for a period of 20 minutes.
Q1.We have some memory leaks and getting hard time to figure out what’s staying in the memory? Do we have a tool to show this?
According to our latest test UIElements are the ones filling the memory. We have 5 nested Itemscontrols, tracking a lot of “loaded” events of inner control in order to fill the appropriate values with calculations. As far as I see virtualization is not working on Items control.
Thanks for all your time.
If you are using the DataGrid, Virtualization should be on by default.
Pulling that much data at one time might also pose a problem. I'd try to find some sort of solution that involves server-side paging.
EDIT:
Just saw that you are using an ItemsControl. The biggest performance boost you'll see (before even getting server paging to work) would be to get virtualization working. Here's a good article about doing it with a generalized ItemsControl (It also addresses your problem with events not firing correctly):
http://blogs.claritycon.com/blogs/lee_roth/archive/2009/09/16/custom-panels-in-silverlight-wpf-part-4-virtualization.aspx

How to speed up WPF programs?

I love programming with and for Windows Presentation Framework. Mostly I write browser-like apps using WPF and XAML.
But what really annoys me is the slowness of WPF. A simple page with only a few controls loads fast enough, but as soon as a page is a teeny weeny bit more complex, like containing a lot of data entry fields, one or two tab controls, and stuff, it gets painful.
Loading of such a page can take more than one second. Seconds, indeed, especially on not so fast computers (read: the customers computers) it can take ages.
Same with changing values on the page. Everything about the WPF UI is somehow sluggy.
This is so mean! They give me this beautiful framework, but make it so excruciatingly slow so I'll have to apologize to our customers all the time!
My Question:
How do you speed up WPF?
How do you profile bottlenecks?
How do you deal with the slowness?
Since this seems to be an universal problem with WPF, I'm looking for general advice, useful for many situations and problems.
Some other related questions:
What tools do you use for WPF development
Tools to develop WPF or Silverlight applications
How do you speed up WPF?
Often after using one of the following profiling tools it is obvious what is causing my bottlenecks.
If memory is the issue then I virtualize my data.
If render time is the issue then I virtualize the controls or simplify control templates where possible.
If processing time is the issue I try to improve my algorithm or move that work to a background thread and show a throbber in my ui while the work is going.
How do you profile bottlenecks?
.NET Memory Pofiler
dotTrace
Performance Profiling Tools for WPF
Snoop
Crack.NET
How do you deal with the slowness?
Profiling and counseling.
Install SP1... Loads of very cool performance increases for WPF!!!
Read more here
Here is a example of 2 enhanchements made in SP1: Deffered scrolling & UI Element recyceling!!!
I can not add comments, that's why I post a new answer to this: I've found this video from the pdc09 that gives some ideas about how to profile wpf apps and because it helped me lot, I want to share the link:
Advanced WPF Application Performance Tuning and Analysis
WPF is meant for computers with modern graphics cards. Do your clients have modern graphics cards capable of running Aero? If your clients have older graphics cards, WPF will fall back to software rendering which runs extremely slow in comparison to hardware accelerated graphics.
You also might want to profile your application to make sure that it is actually WPF that is the slow part. It's possible that there is something else that is actually the bottleneck.
avoiding animations also helps a lot sometimes. if you have to use animations, decrease the framerate, this will improve "Feeled" performance
Remove alpha transparency/ bitmap effects.
can you give more details?
I only noticed a slow performance when I use something like a listview or a grid that has some complexity. The solution is to simplify it.
Other than that I only noticed a slow performance when loading the app for the first time.
HTH
I find it helpful to side-step the XAML, and write the entire UI in C#. This lets me precisely control when the controls are created and loaded. It also helps me understand what XAML is doing "under the covers".

Resources