Interop working set
So I promised awhile back to get some performance numbers on hwnd integration. I started with a very simple MFC application (which doesn't do a whole lot besides use MDI and document-view), and measured the working set of that. Then I recompiled using /clr (best practice is to use /clr only on those C++ files which actually need it, but since this one is fairly small I /clr'ed everything). Finally, I used HwndSource to put some xaml inside one of the MFC CViews. The numbers were:
MFC only |
with /clr |
with WPF | ||
working set total |
4744 |
9224 |
22956 | |
private |
576 |
1576 |
5536 | |
shareable |
512 |
844 |
7356 | |
shared |
3656 |
6804 |
10064 | |
modules total |
2948 |
6476 |
16808 | |
WPF |
-- |
-- |
6184 | |
CLR |
-- |
3288 |
5980 | |
other |
2948 |
3188 |
4644 | |
Data total |
1700 |
2584 |
5640 | |
heap |
184 |
432 |
2054 | |
gc heap |
-- |
0 |
646 |
Performance numbers always require some interpretation, and these are no different. First thing to note is that your mileage may vary -- you aren't writing the same program I am, and your program may use more or different functionality. (and in that "/clr" column, it's hard to use less of the CLR than that) The "modules" and "data" numbers are really there to emphasize that point and to help you map results to your application -- eg, # of bytes used by the CLR varies considerably depending on whether you are using just a tiny bit of managed code (the middle column) or more substantial amounts of managed code (column on the right).
The second thing to call out is that there is no one bottom line, although if you had to pick one, it's probably private working set -- bytes not shared or potentially shared with other processes. In WPF, we pay attention to all of those working set numbers, but concentrate the most on private working set as that has the most direct impact on paging.
Final thing to call out is that these are pre-release WPF bits, we're continuing to make perf improvements and we get a noticeable boost just by doing the final release optimizations, but these numbers will give you a ballpark -- the working set is not 10's of bytes nor is it gigabytes.
If you're interested in performance, let me suggest Rico Mariani's blog (https://blogs.msdn.com/ricom), he'll also be at the PDC helping people to their applications. And of course, that age-old wisdom about performance -- measure early, measure often!