w8 – unwrapping the not- so-obvious kevin dockx | 05/03/2013

Download W8 – Unwrapping the not- so-obvious Kevin Dockx | 05/03/2013

If you can't read please download the document

Upload: franklin-harvey

Post on 17-Dec-2015

218 views

Category:

Documents


0 download

TRANSCRIPT

  • Slide 1
  • W8 Unwrapping the not- so-obvious Kevin Dockx | 05/03/2013
  • Slide 2
  • 2012 Microsoft Corporation. All rights reserved.
  • Slide 3
  • Slide 4
  • Agenda Navigation, Suspension Manager & complex types Manipulating the navigation stack Handling exceptions in awaitable methods that arent awaited Implementing a Variable Sized Grid Incrementally loading data Debugging background tasks
  • Slide 5
  • Agenda Can you get local host access? Async & Await: theres more to it Performance tips & tricks The most important tip of this session Q&A
  • Slide 6
  • Slide 7
  • Suspension manager? Implementation included in Store Apps Allows you to save & restore state of a View Makes it easy to support PLM for simple apps, but for larger apps, youll probably want your own way to handle PLM
  • Slide 8
  • Suspension manager? Saves and restores the navigation state of the Frame Crashes when you pass in a complex object private static void SaveFrameNavigationState(Frame frame) { var frameState = SessionStateForFrame(frame); frameState["Navigation"] = frame.GetNavigationState(); }
  • Slide 9
  • Support complex objects? Simple approach: pass in simple types If you must: (de)serialize yourself JsonHelper class JsonHelper.ToJson when navigating JsonHelper.FromJson in LoadState
  • Slide 10
  • Rgis Laurent Director of Operations, Global Knowledge Competencies include: Gold Learning Silver System Management Demo
  • Slide 11
  • Slide 12
  • Manipulating the Navigation Stack Why would you want to do this? Typically: showing a disclaimer, an initial wizard, Check for value in Application Settings to see if page has to be shown Use Frame.SetNavigationState(1,0,0) to remove all pages from the stack
  • Slide 13
  • Rgis Laurent Director of Operations, Global Knowledge Competencies include: Gold Learning Silver System Management Demo
  • Slide 14
  • Slide 15
  • Exceptions in Async methods Awaitable methods arent always awaited In such a case, when Exception happens => NOT caught by App_UnhandledException What if you still want to know about it? Handle the TaskScheduler.UnobservedTaskException event
  • Slide 16
  • Rgis Laurent Director of Operations, Global Knowledge Competencies include: Gold Learning Silver System Management Demo
  • Slide 17
  • Slide 18
  • Implementing a VariableSizedWrapGrid Create your own GridView class, inherit from GridView Override PrepareContainerForItemOverride Set RowSpan & ColumnSpan VariableSizedWrapGrid.SetRowSpan VariableSizedWrapGrid.SetColumnSpan
  • Slide 19
  • Implementing a VariableSizedWrapGrid In XAML, use the newly created GridView Set the ItemPanelTemplate to a VariableSizedWrapGrid Optionally define the orientation Optionally define the maximum number of rows/columns Typically, define ItemHeight & ItemWidth
  • Slide 20
  • Rgis Laurent Director of Operations, Global Knowledge Competencies include: Gold Learning Silver System Management Demo
  • Slide 21
  • Slide 22
  • Incrementally loading data An old trick Create a style for your ListViewBase (ListView, GridView) Handle the ScrollViewers ViewChanged event, check the offset value a better implementation Bind to a collection that supports incremental loading Create a collection, inherit from ObservableCollection Implement ISupportIncrementalLoading
  • Slide 23
  • Rgis Laurent Director of Operations, Global Knowledge Competencies include: Gold Learning Silver System Management Demo
  • Slide 24
  • Slide 25
  • Debugging a Background Task Look for the Debug Location Toolbar Its hidden by default!
  • Slide 26
  • Rgis Laurent Director of Operations, Global Knowledge Competencies include: Gold Learning Silver System Management Demo
  • Slide 27
  • Slide 28
  • Localhost access? No. And theres a good reason for that. Did I say no? I meant yes. Due to a loopback rule, access to localhost is restricted When youre in Visual Studio, your app is exempted from this loopback rule => Allow Local Network loopback You can manually exempt your app, using CheckNetIsolation.exe: CheckNetIsolation.exe LoopbackExempt a p=AppID
  • Slide 29
  • Slide 30
  • Async & Await Support Cancellation Accept a Cancellation Token in your method signature Check for cancellation in that method Handle OperationCancelledException
  • Slide 31
  • Async & Await UI thread marshalling is what you get for free Do you always want this? How can you avoid this? await YourAsyncMethod().ConfigureAwait(false);
  • Slide 32
  • Async & Await Waiting for Any or All Tasks to complete var firstCompleted = await Task.WhenAny( SomeAwaitableMethod1(), SomeAwaitableMethod2(), SomeAwaitableMethod3()); => returns the first completed task result var allCompleted = await Task.WhenAll( SomeAwaitableMethod1(), SomeAwaitableMethod2(), SomeAwaitableMethod3()); => returns a list of all results of all tasks
  • Slide 33
  • Slide 34
  • Performance tip #1 Obvious, but maybe not so much: check performance in Release Builds Writing to the output window slows down your app tremendously Use the Performance Profiler
  • Slide 35
  • Peformance tip #2 Use the Async & Await tips Cancel running operations when not needed Execute Tasks in Parallel when possible Do not marshal to the UI thread when its not necessary
  • Slide 36
  • Performance tip #3 Reduce memory consumption Obvious? Yes, but for an additional reason The less memory your app uses, the more likely it is to stay in memory instead of being terminated, ensuring a faster restart after being suspended
  • Slide 37
  • Performance tip #4 Learn about XAML parsing Do not load resources that arent necessary Resource Dictionaries are fully parsed, even though your page might only use one resource of it Your start page shouldnt use application-wide dictionaries If you use a resource throughout your app, put it in Application If you dont, only reference that dictionary on the pages it is used, or even in the page-specific resource dictionary
  • Slide 38
  • Performance tip #4 Optimize element count Dont write this: But write this:
  • Slide 39 "> "> " title="Performance tip #4 Reuse brushes Dont write this: Write this:
  • Performance tip #4 Reuse brushes Dont write this: Write this: