SlideShare a Scribd company logo
1 of 26
Download to read offline
801: BUILDING SCALABLE, HIGH-
PERFORMANCE SHAREPOINT
APPLICATIONS




SPTechCon
2009-01-29, dynaTrace software Inc
Andreas Grabner, andreas.grabner@dynatrace.com
Technology Strategist
Agenda

    While the development of SharePoint-based services is
    relatively easy, making them perform and scale can be
    a real challenge. This class will show you code in the
    SharePoint Component Model, so you can learn
    about what the framework is doing under the hood
    when it is used by a WebPart or an external
    application. This insight is vital in order to build high-
    performing and scalable applications based on




                                                                 © 2008 dynaTrace software GmbH
    SharePoint
    LOTS OF DEMOS!!


2                                                                2
Agenda

    SharePoint Object Model
    •   Considerations when working with lists
    •   Differnt ways to access list content
    •   Batch updating lists
    •   Memory Considerations & Native Resources

    WebParts
    • Design Guidelines
    • Performance Considerations




                                                   © 2008 dynaTrace software GmbH
    • How to debug/analyze/profile

    Tips & Tricks


3                                                  3
Working with SharePoint Lists (1)

    Do not treat SharePoint Lists as database tables
    • Use database tables for transient or transactional data.

    The 2000 Items per List Myth
    • What you read on blogs/articles/...
        • Consider the restriction of a maximum of 2000 items per list container in
          document libraries and lists
        • Create containers (folders) in your list to overcome the 2000 item limit
    • What I think
        • > 2000 is not a problem at all




                                                                                            © 2008 dynaTrace software GmbH
        • If you only request those items in a list that the user needs in the particular
          use case
        • Use Row Limits, Paging, queries, ... to selectively retrieve list items

    Maximum number of items supported in a list with recursive
    containers (folders) is 5 million items

4                                                                                           4
Working with SharePoint Lists (2)

    Consider caching the contents of a list to a DataTable
    or DataSet if the list will be queried multiple times in
    your application
    Consider using PortalSiteMapProvider which
    implements a result cache based on SPQuery‘s
    Use Views to limit the number of columns that are
    retrieved




                                                               © 2008 dynaTrace software GmbH
5                                                              5
Analyze List Usage Behavior

      Do not do pre-mature optimization
      Analyze Usage Patterns of Lists and Views
      Define Index Columns and modify views to improve query
      performance

    Analyze usage and performance of all lists in SharePoint   Analyze usage and performance of all views in SharePoint




                                                                                                                          © 2008 dynaTrace software GmbH
6                                                                                                                         6
Access SharePoint Lists from Code (1)

    Getting Item Count of a List
    DO NOT
    int noOfItems = SPContext.Current.List.Items.Count;

                         ALL List Items are retrieved from the Database




    DO




                                                                                                          © 2008 dynaTrace software GmbH
    int noOfItems = SPContext.Current.List.ItemCount;

                          Item Count is kept redundant in the AllUserData table and also kept in memory




7                                                                                                         7
Access SharePoint Lists from Code (2)

    Iterating through List Items – THE WRONG WAY
    DO NOT
    for (int itemIx=0;itemIx< SPContext.Current.List.Items.Count;itemIx++) {
        SPListItem listItem = SPContext.Current.List.Items[itemIx];
        // do something ...
    }

                      Every access to Count and Items Property queries the whole SharePoint list




                                                                                                   © 2008 dynaTrace software GmbH
                      We end up with 202 SQL Executions with a total exec time of > 1s




8                                                                                                  8
Access SharePoint Lists from Code (3)

    Iterating through List Items – THE RIGHT WAY
    DO
    SPListItemCollection items = SPContext.Current.List.Items;
    foreach (SPListItem listItem in items) {
        // do something ...
    }

                      Only first access to the collection queries the data




                                                                             © 2008 dynaTrace software GmbH
9                                                                            9
Access SharePoint Lists from Code (4)

     Limit Rows by using SPQuery
     • Accessing the SPList object always requests ALL items in the list
     • Use SPQuery and the RowLimit property to only query a certain amount
       of elements
     DO
     SPQuery query = new SPQuery();
     query.RowLimit = 100;
     SPListItemCollection items = SPContext.Current.List.GetItems(query);
     for (int itemIx=0;itemIx<items.Count;itemIx++) {
         SPListItem listItem = items[itemIx];
         // do something ...
     }




                                                                                                                     © 2008 dynaTrace software GmbH
                 SPQuery properties are taken into the generated SQL Statment. Only the first X rows are selected




10                                                                                                                  10
Access SharePoint Lists from Code (5)

     Limit Columns by using a View or SPQuery.ViewFields
     • Accessing SPList always returns ALL Fields
     • ONLY request the columns that you really need
     DO
     SPQuery query = new SPQuery(SPContext.Current.ViewContext.View);

     or DO
     SPQuery query = new SPQuery();
     query.ViewFields = "<FieldRef Name='ID'/><FieldRef Name=‘Text Field'/><FieldRef Name=‘XYZ'/>";




                                                                                                                   © 2008 dynaTrace software GmbH
                                                                            SELECT clause when accessing SPList




                                                                            SELECT clause when using a View or
                                                                            ViewFields


11                                                                                                                11
Access SharePoint Lists from Code (6)

     Pagine through SPQuery Results
     • Process query results in batches or
     • Use this feature when implementing custom paging
     DO
     SPQuery query = new SPQuery();
     query.RowLimit = 10; // Thats our page size
     do
     {
       SPListItemCollection items = SPContext.Current.List.GetItems(query);
      // do something with the first batch of items...
      query.ListItemCollectionPosition = items.ListItemCollectionPosition;
     } while (query.ListItemCollectionPosition != null)

              Individual SQL Statements are executed for each page of data




                                                                                                                         © 2008 dynaTrace software GmbH
                                                                   ListItemCollectionPosition is used in WHERE clause


12                                                                                                                      12
Updating Data in SharePoint Lists (1)

     Use Batch Updates when updating multiple items at once
     DO NOT
     for (int itemIx=0;itemIx<newItems;itemIx++) {
       SPListItem newItem = items.Add();
       // fill the individual fields
       newItem.Update();
     }


              Every Update is done separately and requires a roundtrip to the DB




                                                                                    © 2008 dynaTrace software GmbH
13                                                                                 13
Updating Data in SharePoint Lists (2)

     Construct a CAML Update Query and Execute it via SPWeb
     DO
     StringBuilder query = new StringBuilder();
     for (int itemIx=0;itemIx<newItems;itemIx++) {
       query.AppendFormat("<Method ID=”{0}”>" +
             "<SetList>{1}</SetList>" +
             "<SetVar Name=“ID”>New</SetVar>" +
             "<SetVar Name=”Cmd”>Save</SetVar>" +
             "<SetVar Name=”{3}Title”>{2}</SetVar>" +
           "</Method>“, i, listGuid, someValue, "urn:schemas-microsoft-com:office:office#");
     }
     SPContext.Current.Web.ProcessBatchData("<?xml version="1.0" encoding="UTF-8"?>" +
       "<ows:Batch OnError="Return">{0}</ows:Batch>", query.ToString())




                                                                                                                        © 2008 dynaTrace software GmbH
              CAML Query is processed in Batch by ProcessBatchData                  Without Batch




                                                                                     Almost 2 seconds difference for
                                                                                          inserting 100 items


14                                                                                                                     14
Updating Data in SharePoint Lists (3)

     Use the Web Service API as an alternative
     • http://msdn.microsoft.com/en-us/library/lists.lists.updatelistitems.aspx
     DO
     StringBuilder query = new StringBuilder();
     for (int itemIx=0;itemIx<newItems;itemIx++) {
       query.AppendFormat("<Method ID=”{0}”>" +
             "<SetList>{1}</SetList>" +
             "<SetVar Name=“ID”>New</SetVar>" +
             "<SetVar Name=”Cmd”>Save</SetVar>" +
             "<SetVar Name=”{3}Title”>{2}</SetVar>" +
           "</Method>“, i, listGuid, someValue, "urn:schemas-microsoft-com:office:office#");
     }
     System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
     System.Xml.XmlElement elBatch = xmlDoc.CreateElement("Batch");




                                                                                                © 2008 dynaTrace software GmbH
     elBatch.SetAttribute("OnError", "Return");
     elBatch.InnerXml = methods.ToString();
     localhost.Lists listService = new SPConsole.localhost.Lists();
     listService.Credentials = System.Net.CredentialCache.DefaultCredentials;
     listService.UpdateListItems(listname, elBatch);




15                                                                                             15
Summary on SharePoint Object Model
     Count List Items
      • SPList.ItemCount instead of SPListItemCollection.Count
     Iterating through SPList
      • Store SPListItemCollection in variable instead of accessing List property in loop
      • Limit the number of Items retrieved by using SPQuery and RowLimit
     Limit Columns
      • Use a View or SPQuery to limit the number of columns and rows that will be
        retrieved
     Paging through data
      • Make use of SPQuery ListItemCollectionPosition feature to page through data
      • Use an appropriate RowLimit value to define the page size




                                                                                             © 2008 dynaTrace software GmbH
     List Updates
      • Do batch updates via WebService Lists.UpdateListItems or
        SPWeb.ProcessBatchData
     List Item Collections
      • Store myList.Items in a SPListItemCollection variable when accessed multiple
        times


16                                                                                          16
Interesting Links on SharePoint Lists

     SharePoint List Performance
     • http://blog.solanite.com/keith/Lists/Posts/Post.aspx?ID=15
     • http://blog.thekid.me.uk/archive/2007/02/24/deleting-a-
       considerable-number-of-items-from-a-list-in-sharepoint.aspx
     • http://blog.solanite.com/keith/Lists/Posts/Post.aspx?ID=15

     Link Collection about Performance
     • http://blogs.msdn.com/joelo/archive/2007/07/09/capacity
       -planning-key-links-and-info.aspx




                                                                      © 2008 dynaTrace software GmbH
     Information about Row Limit and Paging
     • http://msdn.microsoft.com/en-us/library/cc404818.aspx


17                                                                   17
SharePoint Object Model



                    DEMO
     Whats going on „under the hood“ when using the
     SharePoint Object Model?
     How to improve SharePoint Data Access?




                                                       © 2008 dynaTrace software GmbH
18                                                    18
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/an
       nouncing-spdisposecheck-tool-for-sharepoint-
       developers.aspx




                                                                   © 2008 dynaTrace software GmbH
     • http://msdn.microsoft.com/en-us/library/bb687949.aspx
     • http://msdn2.microsoft.com/en-
       us/library/aa973248.aspx#sharepointobjmodel_otherobject
       sthatrequire-disposal

19                                                                19
INEFFICIENT use of RESOURCES

     Monitor resources
      •   Monitor Memory
      •   Monitor Database connections
      •   Monitor „critical“ SharePoint objects (SPSite, SPWeb)
      •   Identify leaking responsible WebParts

                                                 Identify „leaking“ object instances
Monitor SharePoint Memory -> Growing Heap?




                                                                                         © 2008 dynaTrace software GmbH
                                                 Identify who allocates those objects




20                                                                                      20
Data is REQUESTED in an INEFFICIENT way



                     DEMO
     How to identify a SPSite/SPWeb Resource Leak?
     How to identify resource intensive WebParts?
     How to monitor SharePoint Memory Issues down to




                                                        © 2008 dynaTrace software GmbH
     the Object Model‘s Data Access classes?




21                                                     21
Web Parts Design Guidelines

     Design Web Parts to perform only a single function in order to
     improve reuse
     Design Web Parts to be configurable or customizable by users
     Include a Web Part Manager in custom master pages that will
     be used by Web Part pages
     Consider using Web Part verbs to allow users to perform
     discrete actions
     Consider categorizing your properties to distinguish them from




                                                                       © 2008 dynaTrace software GmbH
     Web Part properties
     Dispose properly of any SharePoint objects and unmanaged
     resources that you create in your Web Parts
     • Many SharePoint Objects hold references to unmanaged objects


22                                                                    22
WebPart Troubleshooting

     Attach to w3wp.exe process
     • Use Process Explorer to find correct w3wp (-ap parameter)
     Understand ASP.NET Page Execution LifeCycle
     • ASP.NET is the underlying technology
     • Understand where your custom code fits in
     Be careful with VIEWSTATE
     • Easy to use but comes with many side-effects
     Memory Management
     • Be careful with allocating too many small short living objects




                                                                         © 2008 dynaTrace software GmbH
     • Make sure to free references
     Resource Management
     • Dispose/Release objects
     • Hold on to resources only as long as you need it


23                                                                      23
Tips & Tricks

     Turn on IIS-Compression
     • http://planetmoss.blogspot.com/2007/06/dont-forget-iis-
       compression-colleague.html

     BLOB Caching
     • http://office.microsoft.com/en-
       us/sharepointserver/HA101762841033.aspx

     Delay loading core.js




                                                                  © 2008 dynaTrace software GmbH
     • http://support.microsoft.com/kb/933823




24                                                               24
Tips & Tricks

     Pre-Create Personal Site
     • UserProfile.CreatePersonalSite()
     • Can take several seconds per user
     • Do it up-front to avoid heavy load when releasing new
       SharePoint installation

     using (SPSite spSite = new SPSite(@“http://server“))
     {
         ServerContext siteContext = ServerContext.GetContext(spSite);




                                                                                © 2008 dynaTrace software GmbH
         UserProfileManager pmManager = new UserProfileManager(siteContext);
         UserProfile spUser = pmManager.GetUserProfile(„domainusername“);
         spUser.CreatePersonalSite();
     }




25                                                                             25
References & Contact

     MS SharePoint Team Blog
     • http://blogs.msdn.com/sharepoint/default.aspx
     • http://blogs.msdn.com/sharepoint/archive/2006/02/27/53
       9689.aspx

     Contact me for follow up
     •   Andreas Grabner
     •   Mail: andreas.grabner@dynatrace.com
     •   Blog: http://blog.dynatrace.com




                                                                 © 2008 dynaTrace software GmbH
     •   Web: http://www.dynatrace.com




26                                                              26

More Related Content

What's hot

Using hash fields in sql server tech republic
Using hash fields in sql server   tech republicUsing hash fields in sql server   tech republic
Using hash fields in sql server tech republicKaing Menglieng
 
Using object dependencies in sql server 2008 tech republic
Using object dependencies in sql server 2008   tech republicUsing object dependencies in sql server 2008   tech republic
Using object dependencies in sql server 2008 tech republicKaing Menglieng
 
What's new in Mondrian 4?
What's new in Mondrian 4?What's new in Mondrian 4?
What's new in Mondrian 4?Julian Hyde
 
Moving apps to the cloud 3rd edition
Moving apps to the cloud 3rd editionMoving apps to the cloud 3rd edition
Moving apps to the cloud 3rd editionDavid J Rosenthal
 
Sharepoint Saturday India Online best practice for developing share point sol...
Sharepoint Saturday India Online best practice for developing share point sol...Sharepoint Saturday India Online best practice for developing share point sol...
Sharepoint Saturday India Online best practice for developing share point sol...Shakir Majeed Khan
 
Bring your code to explore the Azure Data Lake: Execute your .NET/Python/R co...
Bring your code to explore the Azure Data Lake: Execute your .NET/Python/R co...Bring your code to explore the Azure Data Lake: Execute your .NET/Python/R co...
Bring your code to explore the Azure Data Lake: Execute your .NET/Python/R co...Michael Rys
 
Best Practices and Performance Tuning of U-SQL in Azure Data Lake (SQL Konfer...
Best Practices and Performance Tuning of U-SQL in Azure Data Lake (SQL Konfer...Best Practices and Performance Tuning of U-SQL in Azure Data Lake (SQL Konfer...
Best Practices and Performance Tuning of U-SQL in Azure Data Lake (SQL Konfer...Michael Rys
 
SharePoint TechCon 2009 - 803
SharePoint TechCon 2009 - 803SharePoint TechCon 2009 - 803
SharePoint TechCon 2009 - 803Andreas Grabner
 
aotc_120805_mwagner
aotc_120805_mwagneraotc_120805_mwagner
aotc_120805_mwagnerMary Wagner
 
ASP.NET 08 - Data Binding And Representation
ASP.NET 08 - Data Binding And RepresentationASP.NET 08 - Data Binding And Representation
ASP.NET 08 - Data Binding And RepresentationRandy Connolly
 
Ado.net session05
Ado.net session05Ado.net session05
Ado.net session05Niit Care
 
Data Seeding via Parameterized API Requests
Data Seeding via Parameterized API RequestsData Seeding via Parameterized API Requests
Data Seeding via Parameterized API RequestsRapidValue
 
Big Data Processing with Spark and .NET - Microsoft Ignite 2019
Big Data Processing with Spark and .NET - Microsoft Ignite 2019Big Data Processing with Spark and .NET - Microsoft Ignite 2019
Big Data Processing with Spark and .NET - Microsoft Ignite 2019Michael Rys
 

What's hot (14)

Using hash fields in sql server tech republic
Using hash fields in sql server   tech republicUsing hash fields in sql server   tech republic
Using hash fields in sql server tech republic
 
Using object dependencies in sql server 2008 tech republic
Using object dependencies in sql server 2008   tech republicUsing object dependencies in sql server 2008   tech republic
Using object dependencies in sql server 2008 tech republic
 
What's new in Mondrian 4?
What's new in Mondrian 4?What's new in Mondrian 4?
What's new in Mondrian 4?
 
Moving apps to the cloud 3rd edition
Moving apps to the cloud 3rd editionMoving apps to the cloud 3rd edition
Moving apps to the cloud 3rd edition
 
Sharepoint Saturday India Online best practice for developing share point sol...
Sharepoint Saturday India Online best practice for developing share point sol...Sharepoint Saturday India Online best practice for developing share point sol...
Sharepoint Saturday India Online best practice for developing share point sol...
 
Bring your code to explore the Azure Data Lake: Execute your .NET/Python/R co...
Bring your code to explore the Azure Data Lake: Execute your .NET/Python/R co...Bring your code to explore the Azure Data Lake: Execute your .NET/Python/R co...
Bring your code to explore the Azure Data Lake: Execute your .NET/Python/R co...
 
Best Practices and Performance Tuning of U-SQL in Azure Data Lake (SQL Konfer...
Best Practices and Performance Tuning of U-SQL in Azure Data Lake (SQL Konfer...Best Practices and Performance Tuning of U-SQL in Azure Data Lake (SQL Konfer...
Best Practices and Performance Tuning of U-SQL in Azure Data Lake (SQL Konfer...
 
SharePoint TechCon 2009 - 803
SharePoint TechCon 2009 - 803SharePoint TechCon 2009 - 803
SharePoint TechCon 2009 - 803
 
aotc_120805_mwagner
aotc_120805_mwagneraotc_120805_mwagner
aotc_120805_mwagner
 
ASP.NET 08 - Data Binding And Representation
ASP.NET 08 - Data Binding And RepresentationASP.NET 08 - Data Binding And Representation
ASP.NET 08 - Data Binding And Representation
 
Where to save my data, for devs!
Where to save my data, for devs!Where to save my data, for devs!
Where to save my data, for devs!
 
Ado.net session05
Ado.net session05Ado.net session05
Ado.net session05
 
Data Seeding via Parameterized API Requests
Data Seeding via Parameterized API RequestsData Seeding via Parameterized API Requests
Data Seeding via Parameterized API Requests
 
Big Data Processing with Spark and .NET - Microsoft Ignite 2019
Big Data Processing with Spark and .NET - Microsoft Ignite 2019Big Data Processing with Spark and .NET - Microsoft Ignite 2019
Big Data Processing with Spark and .NET - Microsoft Ignite 2019
 

Viewers also liked

Keynote | The Rise and Fall and Rise of Java | James Governor
Keynote | The Rise and Fall and Rise of Java | James GovernorKeynote | The Rise and Fall and Rise of Java | James Governor
Keynote | The Rise and Fall and Rise of Java | James GovernorJAX London
 
2003 Spring Newsletter
2003 Spring Newsletter2003 Spring Newsletter
2003 Spring NewsletterDirect Relief
 
Presentazione cantinando per aziende
Presentazione cantinando per aziendePresentazione cantinando per aziende
Presentazione cantinando per aziendeDaniel Romano
 
Java Tech & Tools | OSGi Best Practices | Emily Jiang
Java Tech & Tools | OSGi Best Practices | Emily JiangJava Tech & Tools | OSGi Best Practices | Emily Jiang
Java Tech & Tools | OSGi Best Practices | Emily JiangJAX London
 
Gatti grandi avventure
Gatti grandi avventureGatti grandi avventure
Gatti grandi avventureZoroastro01
 
Measuring the Impact of Injury to Enhance Recovery, Pam Garton, Managing Dire...
Measuring the Impact of Injury to Enhance Recovery, Pam Garton, Managing Dire...Measuring the Impact of Injury to Enhance Recovery, Pam Garton, Managing Dire...
Measuring the Impact of Injury to Enhance Recovery, Pam Garton, Managing Dire...ArthritisNT
 
Оценка персонала
Оценка персоналаОценка персонала
Оценка персоналаNatali Starginskay
 
Exploring Cloud Credentials for Institutional Use
Exploring Cloud Credentials for Institutional UseExploring Cloud Credentials for Institutional Use
Exploring Cloud Credentials for Institutional UseJeremy Rosenberg
 
2011 Pmo Symposium Enhancing The Pmo Partership Final
2011 Pmo Symposium Enhancing The Pmo Partership Final2011 Pmo Symposium Enhancing The Pmo Partership Final
2011 Pmo Symposium Enhancing The Pmo Partership Finalsremingt
 
Свободни курсове за обучение
Свободни курсове за обучениеСвободни курсове за обучение
Свободни курсове за обучениеOpenFest team
 
List notable awards and honors
List notable awards and honorsList notable awards and honors
List notable awards and honorsDirect Relief
 
Obesità e stress ossidativo: una relazione pericolosa.
Obesità e stress ossidativo: una relazione pericolosa. Obesità e stress ossidativo: una relazione pericolosa.
Obesità e stress ossidativo: una relazione pericolosa. CreAgri Europe
 
Виртуализирано видеонаблюдение под FreeBSD
Виртуализирано видеонаблюдение под FreeBSDВиртуализирано видеонаблюдение под FreeBSD
Виртуализирано видеонаблюдение под FreeBSDOpenFest team
 
「ALMがもたらす新しいソフトウェア開発へのフェーズの変化とは?」TFSユーザーズ勉強会
「ALMがもたらす新しいソフトウェア開発へのフェーズの変化とは?」TFSユーザーズ勉強会「ALMがもたらす新しいソフトウェア開発へのフェーズの変化とは?」TFSユーザーズ勉強会
「ALMがもたらす新しいソフトウェア開発へのフェーズの変化とは?」TFSユーザーズ勉強会shibao800
 
Aiducation catalogue feb 28 version
Aiducation catalogue feb 28 versionAiducation catalogue feb 28 version
Aiducation catalogue feb 28 versionElaine Chow
 
Arh2050 fa2014 proust questionnaire
Arh2050 fa2014 proust questionnaireArh2050 fa2014 proust questionnaire
Arh2050 fa2014 proust questionnaireProfWillAdams
 
Redis the better NoSQL
Redis the better NoSQLRedis the better NoSQL
Redis the better NoSQLOpenFest team
 

Viewers also liked (20)

Keynote | The Rise and Fall and Rise of Java | James Governor
Keynote | The Rise and Fall and Rise of Java | James GovernorKeynote | The Rise and Fall and Rise of Java | James Governor
Keynote | The Rise and Fall and Rise of Java | James Governor
 
2003 Spring Newsletter
2003 Spring Newsletter2003 Spring Newsletter
2003 Spring Newsletter
 
Presentazione cantinando per aziende
Presentazione cantinando per aziendePresentazione cantinando per aziende
Presentazione cantinando per aziende
 
Java Tech & Tools | OSGi Best Practices | Emily Jiang
Java Tech & Tools | OSGi Best Practices | Emily JiangJava Tech & Tools | OSGi Best Practices | Emily Jiang
Java Tech & Tools | OSGi Best Practices | Emily Jiang
 
Gatti grandi avventure
Gatti grandi avventureGatti grandi avventure
Gatti grandi avventure
 
Measuring the Impact of Injury to Enhance Recovery, Pam Garton, Managing Dire...
Measuring the Impact of Injury to Enhance Recovery, Pam Garton, Managing Dire...Measuring the Impact of Injury to Enhance Recovery, Pam Garton, Managing Dire...
Measuring the Impact of Injury to Enhance Recovery, Pam Garton, Managing Dire...
 
Оценка персонала
Оценка персоналаОценка персонала
Оценка персонала
 
Exploring Cloud Credentials for Institutional Use
Exploring Cloud Credentials for Institutional UseExploring Cloud Credentials for Institutional Use
Exploring Cloud Credentials for Institutional Use
 
2011 Pmo Symposium Enhancing The Pmo Partership Final
2011 Pmo Symposium Enhancing The Pmo Partership Final2011 Pmo Symposium Enhancing The Pmo Partership Final
2011 Pmo Symposium Enhancing The Pmo Partership Final
 
Свободни курсове за обучение
Свободни курсове за обучениеСвободни курсове за обучение
Свободни курсове за обучение
 
List notable awards and honors
List notable awards and honorsList notable awards and honors
List notable awards and honors
 
Obesità e stress ossidativo: una relazione pericolosa.
Obesità e stress ossidativo: una relazione pericolosa. Obesità e stress ossidativo: una relazione pericolosa.
Obesità e stress ossidativo: una relazione pericolosa.
 
Виртуализирано видеонаблюдение под FreeBSD
Виртуализирано видеонаблюдение под FreeBSDВиртуализирано видеонаблюдение под FreeBSD
Виртуализирано видеонаблюдение под FreeBSD
 
「ALMがもたらす新しいソフトウェア開発へのフェーズの変化とは?」TFSユーザーズ勉強会
「ALMがもたらす新しいソフトウェア開発へのフェーズの変化とは?」TFSユーザーズ勉強会「ALMがもたらす新しいソフトウェア開発へのフェーズの変化とは?」TFSユーザーズ勉強会
「ALMがもたらす新しいソフトウェア開発へのフェーズの変化とは?」TFSユーザーズ勉強会
 
Robin hood
Robin hoodRobin hood
Robin hood
 
Проект Жизнь
Проект ЖизньПроект Жизнь
Проект Жизнь
 
Aiducation catalogue feb 28 version
Aiducation catalogue feb 28 versionAiducation catalogue feb 28 version
Aiducation catalogue feb 28 version
 
Arh2050 fa2014 proust questionnaire
Arh2050 fa2014 proust questionnaireArh2050 fa2014 proust questionnaire
Arh2050 fa2014 proust questionnaire
 
Virus
VirusVirus
Virus
 
Redis the better NoSQL
Redis the better NoSQLRedis the better NoSQL
Redis the better NoSQL
 

Similar to SharePoint TechCon 2009 - 801

Intro to SharePoint + PowerShell
Intro to SharePoint + PowerShellIntro to SharePoint + PowerShell
Intro to SharePoint + PowerShellRyan Dennis
 
Salesforce winter 16 release
Salesforce winter 16 releaseSalesforce winter 16 release
Salesforce winter 16 releaseJitendra Zaa
 
OAP: Optimized Analytics Package for Spark Platform with Daoyuan Wang and Yua...
OAP: Optimized Analytics Package for Spark Platform with Daoyuan Wang and Yua...OAP: Optimized Analytics Package for Spark Platform with Daoyuan Wang and Yua...
OAP: Optimized Analytics Package for Spark Platform with Daoyuan Wang and Yua...Databricks
 
Making Life Easier with PowerShell - SPSRIC
Making Life Easier with PowerShell - SPSRICMaking Life Easier with PowerShell - SPSRIC
Making Life Easier with PowerShell - SPSRICMichael Greene
 
Elastic Stack Introduction
Elastic Stack IntroductionElastic Stack Introduction
Elastic Stack IntroductionVikram Shinde
 
SPCA2013 - SharePoint Nightmares - Coding Patterns and Practices
SPCA2013 - SharePoint Nightmares - Coding Patterns and PracticesSPCA2013 - SharePoint Nightmares - Coding Patterns and Practices
SPCA2013 - SharePoint Nightmares - Coding Patterns and PracticesNCCOMMS
 
It Shore Beats Working: Configuring Elasticsearch to get the Most out of Clo...
It Shore Beats Working:  Configuring Elasticsearch to get the Most out of Clo...It Shore Beats Working:  Configuring Elasticsearch to get the Most out of Clo...
It Shore Beats Working: Configuring Elasticsearch to get the Most out of Clo...Ipro Tech
 
S. Bartoli & F. Pompermaier – A Semantic Big Data Companion
S. Bartoli & F. Pompermaier – A Semantic Big Data CompanionS. Bartoli & F. Pompermaier – A Semantic Big Data Companion
S. Bartoli & F. Pompermaier – A Semantic Big Data CompanionFlink Forward
 
Top 20 something info path 2010 tips and trips - sps-ozarks12
Top 20 something info path 2010 tips and trips - sps-ozarks12Top 20 something info path 2010 tips and trips - sps-ozarks12
Top 20 something info path 2010 tips and trips - sps-ozarks12Kevin Dostalek
 
Connecting to a REST API in iOS
Connecting to a REST API in iOSConnecting to a REST API in iOS
Connecting to a REST API in iOSgillygize
 
INFOGOV14 - Trusting Your KM & ECM Strategy to SharePoint
INFOGOV14 - Trusting Your KM & ECM Strategy to SharePointINFOGOV14 - Trusting Your KM & ECM Strategy to SharePoint
INFOGOV14 - Trusting Your KM & ECM Strategy to SharePointJonathan Ralton
 
SharePoint 2014: Where to save my data, for devs!
SharePoint 2014: Where to save my data, for devs!SharePoint 2014: Where to save my data, for devs!
SharePoint 2014: Where to save my data, for devs!Ben Steinhauser
 
Data Access Options in SharePoint 2010
Data Access Options in SharePoint 2010Data Access Options in SharePoint 2010
Data Access Options in SharePoint 2010Rob Windsor
 
SharePoint 2013 Search Architecture with Russ Houberg
SharePoint 2013  Search Architecture with Russ HoubergSharePoint 2013  Search Architecture with Russ Houberg
SharePoint 2013 Search Architecture with Russ Houbergknowledgelakemarketing
 
Elsd sql server_integration_services
Elsd sql server_integration_servicesElsd sql server_integration_services
Elsd sql server_integration_servicesSteve Xu
 
Sps mad2018 joel rodrigues - pn-p reusable controls and pnpjs
Sps mad2018   joel rodrigues - pn-p reusable controls and pnpjsSps mad2018   joel rodrigues - pn-p reusable controls and pnpjs
Sps mad2018 joel rodrigues - pn-p reusable controls and pnpjsJoel Rodrigues
 
PowerShell Introduction to Administering SharePoint On-Premises & O365
PowerShell Introduction to Administering SharePoint On-Premises & O365PowerShell Introduction to Administering SharePoint On-Premises & O365
PowerShell Introduction to Administering SharePoint On-Premises & O365Michael Greene
 
Using ActiveObjects in Atlassian Plugins
Using ActiveObjects in Atlassian PluginsUsing ActiveObjects in Atlassian Plugins
Using ActiveObjects in Atlassian PluginsAtlassian
 

Similar to SharePoint TechCon 2009 - 801 (20)

Intro to SharePoint + PowerShell
Intro to SharePoint + PowerShellIntro to SharePoint + PowerShell
Intro to SharePoint + PowerShell
 
Salesforce winter 16 release
Salesforce winter 16 releaseSalesforce winter 16 release
Salesforce winter 16 release
 
OAP: Optimized Analytics Package for Spark Platform with Daoyuan Wang and Yua...
OAP: Optimized Analytics Package for Spark Platform with Daoyuan Wang and Yua...OAP: Optimized Analytics Package for Spark Platform with Daoyuan Wang and Yua...
OAP: Optimized Analytics Package for Spark Platform with Daoyuan Wang and Yua...
 
Making Life Easier with PowerShell - SPSRIC
Making Life Easier with PowerShell - SPSRICMaking Life Easier with PowerShell - SPSRIC
Making Life Easier with PowerShell - SPSRIC
 
Elastic Stack Introduction
Elastic Stack IntroductionElastic Stack Introduction
Elastic Stack Introduction
 
Spark sql meetup
Spark sql meetupSpark sql meetup
Spark sql meetup
 
SPCA2013 - SharePoint Nightmares - Coding Patterns and Practices
SPCA2013 - SharePoint Nightmares - Coding Patterns and PracticesSPCA2013 - SharePoint Nightmares - Coding Patterns and Practices
SPCA2013 - SharePoint Nightmares - Coding Patterns and Practices
 
It Shore Beats Working: Configuring Elasticsearch to get the Most out of Clo...
It Shore Beats Working:  Configuring Elasticsearch to get the Most out of Clo...It Shore Beats Working:  Configuring Elasticsearch to get the Most out of Clo...
It Shore Beats Working: Configuring Elasticsearch to get the Most out of Clo...
 
S. Bartoli & F. Pompermaier – A Semantic Big Data Companion
S. Bartoli & F. Pompermaier – A Semantic Big Data CompanionS. Bartoli & F. Pompermaier – A Semantic Big Data Companion
S. Bartoli & F. Pompermaier – A Semantic Big Data Companion
 
Top 20 something info path 2010 tips and trips - sps-ozarks12
Top 20 something info path 2010 tips and trips - sps-ozarks12Top 20 something info path 2010 tips and trips - sps-ozarks12
Top 20 something info path 2010 tips and trips - sps-ozarks12
 
Connecting to a REST API in iOS
Connecting to a REST API in iOSConnecting to a REST API in iOS
Connecting to a REST API in iOS
 
INFOGOV14 - Trusting Your KM & ECM Strategy to SharePoint
INFOGOV14 - Trusting Your KM & ECM Strategy to SharePointINFOGOV14 - Trusting Your KM & ECM Strategy to SharePoint
INFOGOV14 - Trusting Your KM & ECM Strategy to SharePoint
 
SharePoint 2014: Where to save my data, for devs!
SharePoint 2014: Where to save my data, for devs!SharePoint 2014: Where to save my data, for devs!
SharePoint 2014: Where to save my data, for devs!
 
Data Access Options in SharePoint 2010
Data Access Options in SharePoint 2010Data Access Options in SharePoint 2010
Data Access Options in SharePoint 2010
 
SharePoint 2013 Search Architecture with Russ Houberg
SharePoint 2013  Search Architecture with Russ HoubergSharePoint 2013  Search Architecture with Russ Houberg
SharePoint 2013 Search Architecture with Russ Houberg
 
Elsd sql server_integration_services
Elsd sql server_integration_servicesElsd sql server_integration_services
Elsd sql server_integration_services
 
Sps mad2018 joel rodrigues - pn-p reusable controls and pnpjs
Sps mad2018   joel rodrigues - pn-p reusable controls and pnpjsSps mad2018   joel rodrigues - pn-p reusable controls and pnpjs
Sps mad2018 joel rodrigues - pn-p reusable controls and pnpjs
 
PowerShell Introduction to Administering SharePoint On-Premises & O365
PowerShell Introduction to Administering SharePoint On-Premises & O365PowerShell Introduction to Administering SharePoint On-Premises & O365
PowerShell Introduction to Administering SharePoint On-Premises & O365
 
Using ActiveObjects in Atlassian Plugins
Using ActiveObjects in Atlassian PluginsUsing ActiveObjects in Atlassian Plugins
Using ActiveObjects in Atlassian Plugins
 
Share Point Object Model
Share Point Object ModelShare Point Object Model
Share Point Object Model
 

More from Andreas Grabner

KCD Munich - Cloud Native Platform Dilemma - Turning it into an Opportunity
KCD Munich - Cloud Native Platform Dilemma - Turning it into an OpportunityKCD Munich - Cloud Native Platform Dilemma - Turning it into an Opportunity
KCD Munich - Cloud Native Platform Dilemma - Turning it into an OpportunityAndreas Grabner
 
OpenTelemetry For GitOps: Tracing Deployments from Git Commit to Production
OpenTelemetry For GitOps: Tracing Deployments from Git Commit to ProductionOpenTelemetry For GitOps: Tracing Deployments from Git Commit to Production
OpenTelemetry For GitOps: Tracing Deployments from Git Commit to ProductionAndreas Grabner
 
Don't Deploy Into the Dark: DORA Metrics for your K8s GitOps Deployments
Don't Deploy Into the Dark: DORA Metrics for your K8s GitOps DeploymentsDon't Deploy Into the Dark: DORA Metrics for your K8s GitOps Deployments
Don't Deploy Into the Dark: DORA Metrics for your K8s GitOps DeploymentsAndreas Grabner
 
Observability and Orchestration of your GitOps Deployments with Keptn
Observability and Orchestration of your GitOps Deployments with KeptnObservability and Orchestration of your GitOps Deployments with Keptn
Observability and Orchestration of your GitOps Deployments with KeptnAndreas Grabner
 
Release Readiness Validation with Keptn for Austrian Online Banking Software
Release Readiness Validation with Keptn for Austrian Online Banking SoftwareRelease Readiness Validation with Keptn for Austrian Online Banking Software
Release Readiness Validation with Keptn for Austrian Online Banking SoftwareAndreas Grabner
 
Adding Security to your SLO-based Release Validation with Keptn
Adding Security to your SLO-based Release Validation with KeptnAdding Security to your SLO-based Release Validation with Keptn
Adding Security to your SLO-based Release Validation with KeptnAndreas Grabner
 
A Guide to Event-Driven SRE-inspired DevOps
A Guide to Event-Driven SRE-inspired DevOpsA Guide to Event-Driven SRE-inspired DevOps
A Guide to Event-Driven SRE-inspired DevOpsAndreas Grabner
 
Jenkins Online Meetup - Automated SLI based Build Validation with Keptn
Jenkins Online Meetup - Automated SLI based Build Validation with KeptnJenkins Online Meetup - Automated SLI based Build Validation with Keptn
Jenkins Online Meetup - Automated SLI based Build Validation with KeptnAndreas Grabner
 
Continuous Delivery and Automated Operations on k8s with keptn
Continuous Delivery and Automated Operations on k8s with keptnContinuous Delivery and Automated Operations on k8s with keptn
Continuous Delivery and Automated Operations on k8s with keptnAndreas Grabner
 
Keptn - Automated Operations & Continuous Delivery for k8s
Keptn - Automated Operations & Continuous Delivery for k8sKeptn - Automated Operations & Continuous Delivery for k8s
Keptn - Automated Operations & Continuous Delivery for k8sAndreas Grabner
 
Shipping Code like a keptn: Continuous Delivery & Automated Operations on k8s
Shipping Code like a keptn: Continuous Delivery & Automated Operations on k8sShipping Code like a keptn: Continuous Delivery & Automated Operations on k8s
Shipping Code like a keptn: Continuous Delivery & Automated Operations on k8sAndreas Grabner
 
Top Performance Problems in Distributed Architectures
Top Performance Problems in Distributed ArchitecturesTop Performance Problems in Distributed Architectures
Top Performance Problems in Distributed ArchitecturesAndreas Grabner
 
Applying AI to Performance Engineering: Shift-Left, Shift-Right, Self-Healing
Applying AI to Performance Engineering: Shift-Left, Shift-Right, Self-HealingApplying AI to Performance Engineering: Shift-Left, Shift-Right, Self-Healing
Applying AI to Performance Engineering: Shift-Left, Shift-Right, Self-HealingAndreas Grabner
 
Monitoring as a Self-Service in Atlassian DevOps Toolchain
Monitoring as a Self-Service in Atlassian DevOps ToolchainMonitoring as a Self-Service in Atlassian DevOps Toolchain
Monitoring as a Self-Service in Atlassian DevOps ToolchainAndreas Grabner
 
How to explain DevOps to your mom
How to explain DevOps to your momHow to explain DevOps to your mom
How to explain DevOps to your momAndreas Grabner
 
DevOps Days Toronto: From 6 Months Waterfall to 1 hour Code Deploys
DevOps Days Toronto: From 6 Months Waterfall to 1 hour Code DeploysDevOps Days Toronto: From 6 Months Waterfall to 1 hour Code Deploys
DevOps Days Toronto: From 6 Months Waterfall to 1 hour Code DeploysAndreas Grabner
 
AWS Summit - Trends in Advanced Monitoring for AWS environments
AWS Summit - Trends in Advanced Monitoring for AWS environmentsAWS Summit - Trends in Advanced Monitoring for AWS environments
AWS Summit - Trends in Advanced Monitoring for AWS environmentsAndreas Grabner
 
DevOps Transformation at Dynatrace and with Dynatrace
DevOps Transformation at Dynatrace and with DynatraceDevOps Transformation at Dynatrace and with Dynatrace
DevOps Transformation at Dynatrace and with DynatraceAndreas Grabner
 
DevOps Pipelines and Metrics Driven Feedback Loops
DevOps Pipelines and Metrics Driven Feedback LoopsDevOps Pipelines and Metrics Driven Feedback Loops
DevOps Pipelines and Metrics Driven Feedback LoopsAndreas Grabner
 
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and How
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and HowBoston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and How
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and HowAndreas Grabner
 

More from Andreas Grabner (20)

KCD Munich - Cloud Native Platform Dilemma - Turning it into an Opportunity
KCD Munich - Cloud Native Platform Dilemma - Turning it into an OpportunityKCD Munich - Cloud Native Platform Dilemma - Turning it into an Opportunity
KCD Munich - Cloud Native Platform Dilemma - Turning it into an Opportunity
 
OpenTelemetry For GitOps: Tracing Deployments from Git Commit to Production
OpenTelemetry For GitOps: Tracing Deployments from Git Commit to ProductionOpenTelemetry For GitOps: Tracing Deployments from Git Commit to Production
OpenTelemetry For GitOps: Tracing Deployments from Git Commit to Production
 
Don't Deploy Into the Dark: DORA Metrics for your K8s GitOps Deployments
Don't Deploy Into the Dark: DORA Metrics for your K8s GitOps DeploymentsDon't Deploy Into the Dark: DORA Metrics for your K8s GitOps Deployments
Don't Deploy Into the Dark: DORA Metrics for your K8s GitOps Deployments
 
Observability and Orchestration of your GitOps Deployments with Keptn
Observability and Orchestration of your GitOps Deployments with KeptnObservability and Orchestration of your GitOps Deployments with Keptn
Observability and Orchestration of your GitOps Deployments with Keptn
 
Release Readiness Validation with Keptn for Austrian Online Banking Software
Release Readiness Validation with Keptn for Austrian Online Banking SoftwareRelease Readiness Validation with Keptn for Austrian Online Banking Software
Release Readiness Validation with Keptn for Austrian Online Banking Software
 
Adding Security to your SLO-based Release Validation with Keptn
Adding Security to your SLO-based Release Validation with KeptnAdding Security to your SLO-based Release Validation with Keptn
Adding Security to your SLO-based Release Validation with Keptn
 
A Guide to Event-Driven SRE-inspired DevOps
A Guide to Event-Driven SRE-inspired DevOpsA Guide to Event-Driven SRE-inspired DevOps
A Guide to Event-Driven SRE-inspired DevOps
 
Jenkins Online Meetup - Automated SLI based Build Validation with Keptn
Jenkins Online Meetup - Automated SLI based Build Validation with KeptnJenkins Online Meetup - Automated SLI based Build Validation with Keptn
Jenkins Online Meetup - Automated SLI based Build Validation with Keptn
 
Continuous Delivery and Automated Operations on k8s with keptn
Continuous Delivery and Automated Operations on k8s with keptnContinuous Delivery and Automated Operations on k8s with keptn
Continuous Delivery and Automated Operations on k8s with keptn
 
Keptn - Automated Operations & Continuous Delivery for k8s
Keptn - Automated Operations & Continuous Delivery for k8sKeptn - Automated Operations & Continuous Delivery for k8s
Keptn - Automated Operations & Continuous Delivery for k8s
 
Shipping Code like a keptn: Continuous Delivery & Automated Operations on k8s
Shipping Code like a keptn: Continuous Delivery & Automated Operations on k8sShipping Code like a keptn: Continuous Delivery & Automated Operations on k8s
Shipping Code like a keptn: Continuous Delivery & Automated Operations on k8s
 
Top Performance Problems in Distributed Architectures
Top Performance Problems in Distributed ArchitecturesTop Performance Problems in Distributed Architectures
Top Performance Problems in Distributed Architectures
 
Applying AI to Performance Engineering: Shift-Left, Shift-Right, Self-Healing
Applying AI to Performance Engineering: Shift-Left, Shift-Right, Self-HealingApplying AI to Performance Engineering: Shift-Left, Shift-Right, Self-Healing
Applying AI to Performance Engineering: Shift-Left, Shift-Right, Self-Healing
 
Monitoring as a Self-Service in Atlassian DevOps Toolchain
Monitoring as a Self-Service in Atlassian DevOps ToolchainMonitoring as a Self-Service in Atlassian DevOps Toolchain
Monitoring as a Self-Service in Atlassian DevOps Toolchain
 
How to explain DevOps to your mom
How to explain DevOps to your momHow to explain DevOps to your mom
How to explain DevOps to your mom
 
DevOps Days Toronto: From 6 Months Waterfall to 1 hour Code Deploys
DevOps Days Toronto: From 6 Months Waterfall to 1 hour Code DeploysDevOps Days Toronto: From 6 Months Waterfall to 1 hour Code Deploys
DevOps Days Toronto: From 6 Months Waterfall to 1 hour Code Deploys
 
AWS Summit - Trends in Advanced Monitoring for AWS environments
AWS Summit - Trends in Advanced Monitoring for AWS environmentsAWS Summit - Trends in Advanced Monitoring for AWS environments
AWS Summit - Trends in Advanced Monitoring for AWS environments
 
DevOps Transformation at Dynatrace and with Dynatrace
DevOps Transformation at Dynatrace and with DynatraceDevOps Transformation at Dynatrace and with Dynatrace
DevOps Transformation at Dynatrace and with Dynatrace
 
DevOps Pipelines and Metrics Driven Feedback Loops
DevOps Pipelines and Metrics Driven Feedback LoopsDevOps Pipelines and Metrics Driven Feedback Loops
DevOps Pipelines and Metrics Driven Feedback Loops
 
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and How
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and HowBoston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and How
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and How
 

Recently uploaded

Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate AgentsRyan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate AgentsRyan Mahoney
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 

Recently uploaded (20)

Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate AgentsRyan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 

SharePoint TechCon 2009 - 801

  • 1. 801: BUILDING SCALABLE, HIGH- PERFORMANCE SHAREPOINT APPLICATIONS SPTechCon 2009-01-29, dynaTrace software Inc Andreas Grabner, andreas.grabner@dynatrace.com Technology Strategist
  • 2. Agenda While the development of SharePoint-based services is relatively easy, making them perform and scale can be a real challenge. This class will show you code in the SharePoint Component Model, so you can learn about what the framework is doing under the hood when it is used by a WebPart or an external application. This insight is vital in order to build high- performing and scalable applications based on © 2008 dynaTrace software GmbH SharePoint LOTS OF DEMOS!! 2 2
  • 3. Agenda SharePoint Object Model • Considerations when working with lists • Differnt ways to access list content • Batch updating lists • Memory Considerations & Native Resources WebParts • Design Guidelines • Performance Considerations © 2008 dynaTrace software GmbH • How to debug/analyze/profile Tips & Tricks 3 3
  • 4. Working with SharePoint Lists (1) Do not treat SharePoint Lists as database tables • Use database tables for transient or transactional data. The 2000 Items per List Myth • What you read on blogs/articles/... • Consider the restriction of a maximum of 2000 items per list container in document libraries and lists • Create containers (folders) in your list to overcome the 2000 item limit • What I think • > 2000 is not a problem at all © 2008 dynaTrace software GmbH • If you only request those items in a list that the user needs in the particular use case • Use Row Limits, Paging, queries, ... to selectively retrieve list items Maximum number of items supported in a list with recursive containers (folders) is 5 million items 4 4
  • 5. Working with SharePoint Lists (2) Consider caching the contents of a list to a DataTable or DataSet if the list will be queried multiple times in your application Consider using PortalSiteMapProvider which implements a result cache based on SPQuery‘s Use Views to limit the number of columns that are retrieved © 2008 dynaTrace software GmbH 5 5
  • 6. Analyze List Usage Behavior Do not do pre-mature optimization Analyze Usage Patterns of Lists and Views Define Index Columns and modify views to improve query performance Analyze usage and performance of all lists in SharePoint Analyze usage and performance of all views in SharePoint © 2008 dynaTrace software GmbH 6 6
  • 7. Access SharePoint Lists from Code (1) Getting Item Count of a List DO NOT int noOfItems = SPContext.Current.List.Items.Count; ALL List Items are retrieved from the Database DO © 2008 dynaTrace software GmbH int noOfItems = SPContext.Current.List.ItemCount; Item Count is kept redundant in the AllUserData table and also kept in memory 7 7
  • 8. Access SharePoint Lists from Code (2) Iterating through List Items – THE WRONG WAY DO NOT for (int itemIx=0;itemIx< SPContext.Current.List.Items.Count;itemIx++) { SPListItem listItem = SPContext.Current.List.Items[itemIx]; // do something ... } Every access to Count and Items Property queries the whole SharePoint list © 2008 dynaTrace software GmbH We end up with 202 SQL Executions with a total exec time of > 1s 8 8
  • 9. Access SharePoint Lists from Code (3) Iterating through List Items – THE RIGHT WAY DO SPListItemCollection items = SPContext.Current.List.Items; foreach (SPListItem listItem in items) { // do something ... } Only first access to the collection queries the data © 2008 dynaTrace software GmbH 9 9
  • 10. Access SharePoint Lists from Code (4) Limit Rows by using SPQuery • Accessing the SPList object always requests ALL items in the list • Use SPQuery and the RowLimit property to only query a certain amount of elements DO SPQuery query = new SPQuery(); query.RowLimit = 100; SPListItemCollection items = SPContext.Current.List.GetItems(query); for (int itemIx=0;itemIx<items.Count;itemIx++) { SPListItem listItem = items[itemIx]; // do something ... } © 2008 dynaTrace software GmbH SPQuery properties are taken into the generated SQL Statment. Only the first X rows are selected 10 10
  • 11. Access SharePoint Lists from Code (5) Limit Columns by using a View or SPQuery.ViewFields • Accessing SPList always returns ALL Fields • ONLY request the columns that you really need DO SPQuery query = new SPQuery(SPContext.Current.ViewContext.View); or DO SPQuery query = new SPQuery(); query.ViewFields = "<FieldRef Name='ID'/><FieldRef Name=‘Text Field'/><FieldRef Name=‘XYZ'/>"; © 2008 dynaTrace software GmbH SELECT clause when accessing SPList SELECT clause when using a View or ViewFields 11 11
  • 12. Access SharePoint Lists from Code (6) Pagine through SPQuery Results • Process query results in batches or • Use this feature when implementing custom paging DO SPQuery query = new SPQuery(); query.RowLimit = 10; // Thats our page size do { SPListItemCollection items = SPContext.Current.List.GetItems(query); // do something with the first batch of items... query.ListItemCollectionPosition = items.ListItemCollectionPosition; } while (query.ListItemCollectionPosition != null) Individual SQL Statements are executed for each page of data © 2008 dynaTrace software GmbH ListItemCollectionPosition is used in WHERE clause 12 12
  • 13. Updating Data in SharePoint Lists (1) Use Batch Updates when updating multiple items at once DO NOT for (int itemIx=0;itemIx<newItems;itemIx++) { SPListItem newItem = items.Add(); // fill the individual fields newItem.Update(); } Every Update is done separately and requires a roundtrip to the DB © 2008 dynaTrace software GmbH 13 13
  • 14. Updating Data in SharePoint Lists (2) Construct a CAML Update Query and Execute it via SPWeb DO StringBuilder query = new StringBuilder(); for (int itemIx=0;itemIx<newItems;itemIx++) { query.AppendFormat("<Method ID=”{0}”>" + "<SetList>{1}</SetList>" + "<SetVar Name=“ID”>New</SetVar>" + "<SetVar Name=”Cmd”>Save</SetVar>" + "<SetVar Name=”{3}Title”>{2}</SetVar>" + "</Method>“, i, listGuid, someValue, "urn:schemas-microsoft-com:office:office#"); } SPContext.Current.Web.ProcessBatchData("<?xml version="1.0" encoding="UTF-8"?>" + "<ows:Batch OnError="Return">{0}</ows:Batch>", query.ToString()) © 2008 dynaTrace software GmbH CAML Query is processed in Batch by ProcessBatchData Without Batch Almost 2 seconds difference for inserting 100 items 14 14
  • 15. Updating Data in SharePoint Lists (3) Use the Web Service API as an alternative • http://msdn.microsoft.com/en-us/library/lists.lists.updatelistitems.aspx DO StringBuilder query = new StringBuilder(); for (int itemIx=0;itemIx<newItems;itemIx++) { query.AppendFormat("<Method ID=”{0}”>" + "<SetList>{1}</SetList>" + "<SetVar Name=“ID”>New</SetVar>" + "<SetVar Name=”Cmd”>Save</SetVar>" + "<SetVar Name=”{3}Title”>{2}</SetVar>" + "</Method>“, i, listGuid, someValue, "urn:schemas-microsoft-com:office:office#"); } System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); System.Xml.XmlElement elBatch = xmlDoc.CreateElement("Batch"); © 2008 dynaTrace software GmbH elBatch.SetAttribute("OnError", "Return"); elBatch.InnerXml = methods.ToString(); localhost.Lists listService = new SPConsole.localhost.Lists(); listService.Credentials = System.Net.CredentialCache.DefaultCredentials; listService.UpdateListItems(listname, elBatch); 15 15
  • 16. Summary on SharePoint Object Model Count List Items • SPList.ItemCount instead of SPListItemCollection.Count Iterating through SPList • Store SPListItemCollection in variable instead of accessing List property in loop • Limit the number of Items retrieved by using SPQuery and RowLimit Limit Columns • Use a View or SPQuery to limit the number of columns and rows that will be retrieved Paging through data • Make use of SPQuery ListItemCollectionPosition feature to page through data • Use an appropriate RowLimit value to define the page size © 2008 dynaTrace software GmbH List Updates • Do batch updates via WebService Lists.UpdateListItems or SPWeb.ProcessBatchData List Item Collections • Store myList.Items in a SPListItemCollection variable when accessed multiple times 16 16
  • 17. Interesting Links on SharePoint Lists SharePoint List Performance • http://blog.solanite.com/keith/Lists/Posts/Post.aspx?ID=15 • http://blog.thekid.me.uk/archive/2007/02/24/deleting-a- considerable-number-of-items-from-a-list-in-sharepoint.aspx • http://blog.solanite.com/keith/Lists/Posts/Post.aspx?ID=15 Link Collection about Performance • http://blogs.msdn.com/joelo/archive/2007/07/09/capacity -planning-key-links-and-info.aspx © 2008 dynaTrace software GmbH Information about Row Limit and Paging • http://msdn.microsoft.com/en-us/library/cc404818.aspx 17 17
  • 18. SharePoint Object Model DEMO Whats going on „under the hood“ when using the SharePoint Object Model? How to improve SharePoint Data Access? © 2008 dynaTrace software GmbH 18 18
  • 19. 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/an nouncing-spdisposecheck-tool-for-sharepoint- developers.aspx © 2008 dynaTrace software GmbH • http://msdn.microsoft.com/en-us/library/bb687949.aspx • http://msdn2.microsoft.com/en- us/library/aa973248.aspx#sharepointobjmodel_otherobject sthatrequire-disposal 19 19
  • 20. INEFFICIENT use of RESOURCES Monitor resources • Monitor Memory • Monitor Database connections • Monitor „critical“ SharePoint objects (SPSite, SPWeb) • Identify leaking responsible WebParts Identify „leaking“ object instances Monitor SharePoint Memory -> Growing Heap? © 2008 dynaTrace software GmbH Identify who allocates those objects 20 20
  • 21. Data is REQUESTED in an INEFFICIENT way DEMO How to identify a SPSite/SPWeb Resource Leak? How to identify resource intensive WebParts? How to monitor SharePoint Memory Issues down to © 2008 dynaTrace software GmbH the Object Model‘s Data Access classes? 21 21
  • 22. Web Parts Design Guidelines Design Web Parts to perform only a single function in order to improve reuse Design Web Parts to be configurable or customizable by users Include a Web Part Manager in custom master pages that will be used by Web Part pages Consider using Web Part verbs to allow users to perform discrete actions Consider categorizing your properties to distinguish them from © 2008 dynaTrace software GmbH Web Part properties Dispose properly of any SharePoint objects and unmanaged resources that you create in your Web Parts • Many SharePoint Objects hold references to unmanaged objects 22 22
  • 23. WebPart Troubleshooting Attach to w3wp.exe process • Use Process Explorer to find correct w3wp (-ap parameter) Understand ASP.NET Page Execution LifeCycle • ASP.NET is the underlying technology • Understand where your custom code fits in Be careful with VIEWSTATE • Easy to use but comes with many side-effects Memory Management • Be careful with allocating too many small short living objects © 2008 dynaTrace software GmbH • Make sure to free references Resource Management • Dispose/Release objects • Hold on to resources only as long as you need it 23 23
  • 24. Tips & Tricks Turn on IIS-Compression • http://planetmoss.blogspot.com/2007/06/dont-forget-iis- compression-colleague.html BLOB Caching • http://office.microsoft.com/en- us/sharepointserver/HA101762841033.aspx Delay loading core.js © 2008 dynaTrace software GmbH • http://support.microsoft.com/kb/933823 24 24
  • 25. Tips & Tricks Pre-Create Personal Site • UserProfile.CreatePersonalSite() • Can take several seconds per user • Do it up-front to avoid heavy load when releasing new SharePoint installation using (SPSite spSite = new SPSite(@“http://server“)) { ServerContext siteContext = ServerContext.GetContext(spSite); © 2008 dynaTrace software GmbH UserProfileManager pmManager = new UserProfileManager(siteContext); UserProfile spUser = pmManager.GetUserProfile(„domainusername“); spUser.CreatePersonalSite(); } 25 25
  • 26. References & Contact MS SharePoint Team Blog • http://blogs.msdn.com/sharepoint/default.aspx • http://blogs.msdn.com/sharepoint/archive/2006/02/27/53 9689.aspx Contact me for follow up • Andreas Grabner • Mail: andreas.grabner@dynatrace.com • Blog: http://blog.dynatrace.com © 2008 dynaTrace software GmbH • Web: http://www.dynatrace.com 26 26