Upload
andreas-grabner
View
242
Download
2
Tags:
Embed Size (px)
Citation preview
602: INTO THE WILDTHE CHALLENGES OF CUSTOMIZED SHAREPOINT APPS IN RELEASE
SPTechCon2009-01-29, dynaTrace software IncAndreas Grabner, [email protected] Strategist
2008 dynaTrace software GmbH
22
Agenda
� This class will examine the real-world challenges of customized SharePoint applications when they are released “into the wild.” We will consider why such applications almost always work on the developer's machine—and why they often fail in production. Web parts and lists are the main focus in this advanced class
� LOTS OF DEMOS!!LOTS OF DEMOS!!LOTS OF DEMOS!!LOTS OF DEMOS!!
2008 dynaTrace software GmbH
33
Why do we end up with performance problems?
� TOO MUCHTOO MUCHTOO MUCHTOO MUCH data is requested
� Data is REQUESTEDREQUESTEDREQUESTEDREQUESTED in an INEFFICIENTINEFFICIENTINEFFICIENTINEFFICIENT way
� INEFFICIENTINEFFICIENTINEFFICIENTINEFFICIENT use of RESOURCESRESOURCESRESOURCESRESOURCES
� INEFFICIENTINEFFICIENTINEFFICIENTINEFFICIENT data RENDERINGRENDERINGRENDERINGRENDERING
� NEVER TESTEDNEVER TESTEDNEVER TESTEDNEVER TESTED with REAL WORLDREAL WORLDREAL WORLDREAL WORLD data
� NEVER TESTED UNDER LOADNEVER TESTED UNDER LOADNEVER TESTED UNDER LOADNEVER TESTED UNDER LOAD
2008 dynaTrace software GmbH
44
TOO MUCH data is requested
� SharePoint Lists• Only display the data that the user really needs to see
• Limit the number of rows that are displayed in the ListWebPart
• Use Views to limit the number of columns that are displayed
• Use alternative WebParts• Sometimes the ListWebView is not the right way to go
• Check the size of returned html page• Consider the overhead on the network/browser rendering time
2008 dynaTrace software GmbH
55
TOO MUCH data is requested
� Optimize Lists based on Usage• Analyze Usage of Lists & Views and optimize on slowest
performing
Analyze usage and performance of all lists in SharePoint Analyze usage and performance of all views in SharePoint
2008 dynaTrace software GmbH
66
TOO MUCH data is requested
� Custom Web Parts• Accessing Data via SharePoint Object Model
• Understand what is going on when accessing Data via API
• Use SPQuery‘s to access only the data you need to display
• Cache Data• Think about caching data that doesn‘t change frequently
Analyze where WebParts spend their time and how they access the data Analyze where most of the time is spent
2008 dynaTrace software GmbH
77
TOO MUCH data is requested
DEMODEMODEMODEMO� How to analyze current list usage behavior?
� How to analyze WebPart data access?
� Comparing Performance Impact when changing Views
2008 dynaTrace software GmbH
88
Data is REQUESTED in an INEFFICIENT way
� SharePoint Object Model• DO NOTDO NOTDO NOTDO NOT iterate through all items in the list
• DO NOTDO NOTDO NOTDO NOT access the Items property multiple times
• AVOIDAVOIDAVOIDAVOID using the Count property
• Use CAMLCAMLCAMLCAML Queries and SPQuerySPQuerySPQuerySPQuery‘‘‘‘ssss to select certain data
• Use the RowLimitRowLimitRowLimitRowLimit and ListItemCollectionPositionListItemCollectionPositionListItemCollectionPositionListItemCollectionPosition Feature of SPQuerySPQuerySPQuerySPQuery
DO NOT
String productName = productList.Items.GetItemById(“1234“)[“ProductName“].ToString();
DO
String productName = productList. GetItemById(“1234“)[“ProductName“].ToString();
or DO
SPQuery query = new SPQuery();
query.Query = "<Where><Eq><FieldRef Name='ID'/><Value Type='Text'>1234</Value></Eq></Where>";
String productName = productList.GetItems(query)[0][“ProductName“].ToString();
DO BEST
query.ViewFields = “<FieldRef Name=‘ProductName‘/>“;
Example: Query the Product Name of a certain Product identified by the Product ID
2008 dynaTrace software GmbH
99
Data is REQUESTED in an INEFFICIENT way
� Whats going on „under the hood“ when using the SharePoint Object Model?
� How to improve SharePoint Data Access?
DEMODEMODEMODEMO
2008 dynaTrace software GmbH
1010
INEFFICIENT use of RESOURCES
� SharePoint Object Model• SPSite and SPWeb hold references to native COM objects• Release SPSite & SPWeb in order to free native resources• Querying too much data results in high memory usage
� Reference• SPDisposeCheck tool
http://blogs.msdn.com/sharepoint/archive/2008/11/12/announcing-spdisposecheck-tool-for-sharepoint-developers.aspx
• http://msdn.microsoft.com/en-us/library/bb687949.aspx• http://msdn2.microsoft.com/en-
us/library/aa973248.aspx#sharepointobjmodel_otherobjectsthatrequire-disposal
2008 dynaTrace software GmbH
1111
INEFFICIENT use of RESOURCES
� Monitor resources• Monitor Memory
• Monitor Database connections
• Monitor „critical“ SharePoint objects (SPSite, SPWeb)
• Identify leaking responsible WebParts
Monitor SharePoint Memory -> Growing Heap?Identify „leaking“ object instances
Identify who allocates those objects
2008 dynaTrace software GmbH
1212
Data is REQUESTED in an INEFFICIENT way
� How to identify a SPSite/SPWeb Resource Leak?
� How to identify resource intensive WebParts?
� How to monitor SharePoint Memory Issues down to the Object Model‘s Data Access classes?
DEMODEMODEMODEMO
2008 dynaTrace software GmbH
1313
INEFFICIENT data RENDERING
� How to render data• StringBuilder vs. String concatenations
• Use HtmlTextWriter for custom WebParts
� How to access data• Follow the rules discussed earlier
� Size matters• Minimize generated HTML
• Use style sheets instead of inline style definitions
• Enable content compression in IIS• http://planetmoss.blogspot.com/2007/06/dont-forget-iis-
compression-colleague.html
2008 dynaTrace software GmbH
1414
INEFFICIENT data RENDERING
� Steps to do• Analyze slow pages with tools like YSlow
• Analyze network infrastructure. Compare server side times vs. Client side times
Analyze Page Size Statistics Analyze individual page objects
2008 dynaTrace software GmbH
1515
NEVER TESTED with REAL WORLD data
� Importance of Test Data• 10 records in a table are not enough10 records in a table are not enough10 records in a table are not enough10 records in a table are not enough• Invest time to generate Test Data• „Random“ data is good -> „Realistic“ data is best• Test Data must be used by developers• Many data access problems can be identified on the developers
machine with appropriate test data
� Problems that can be identified• Performance problems for data retrieval• Index problems• Memory issues• Resource bottlenecks
� Resources• http://www.sharepointblogs.com/ethan/archive/2007/09/27/generatin
g-test-data.aspx• http://www.idevfactory.com/• http://www.codeplex.com/sptdatapop
2008 dynaTrace software GmbH
1616
NEVER TESTED UNDER LOAD
� Importance of Load Testing• Small load tests already on developers machine
• Test as early as possible
• Test main use case scenarios
� Visual Studio Team System for Tester• Pre-configured Web&Load Tests from the SharePoint Team
• dynaTrace Integration with VSTS to analyze performance and scalability issues
� Resources• http://www.codeplex.com/sptdatapop
2008 dynaTrace software GmbH
1717
NEVER TESTED UNDER LOAD
� Load Testing SharePoint with Visual Studio Team System
DEMODEMODEMODEMO
2008 dynaTrace software GmbH
1818
Contact me for follow up
� Andreas Grabner
� Mail: [email protected]
� Blog: http://blog.dynatrace.com
� Web: http://www.dynatrace.com