Exploring the Future Potential of AI-Enabled Smartphone Processors
ASP.NET Scalability - WebDD
1. “This One Goes Up To 11”
or
How to write scalable ASP.NET
Phil Pursglove
phil@philippursglove.com
http://diaryofadotnetdeveloper.blogspot.com
http://www.philippursglove.com/ScalableASPNET
http://twitter.com/philpursglove
2. About Me
• Senior .NET Developer
• MBCS
• MCSD
• VBUG East Anglia Co-ordinator
• Written for VB Developer and SQL
Server Pro
4. What is Scalability?
• “The ability to handle growing amounts of
work in a graceful manner” Wikipedia
• Scalability != Performance
• What affects scalability?
• Everything you see today applies to .NET
2.0 and higher
6. Why Cache?
• Because there’s a credit crunch!
• Building a page is an expensive
process
– Database calls across servers
– Web Service calls
– AD lookups
• Returning a stored page from a cache
is much cheaper!
7. Caching 1: OutputCache
• Caches the rendered HTML from your page
– Duration is in seconds
– VaryByParam allows you to cache several
versions
– Location means you can cache on the web
server, client, downstream machines or all of
these
– CacheProfiles mean you have fine config-based
control
– Cached pages can be removed with
HttpResponse.RemoveOutputCachedItem
8. Caching 2: Donut Caching
• aka Post-Cache Substitution
• Inject dynamic content into a cached
page before it is returned to the client
– <asp:substitution>
– Must use static methods with a
HttpContext
9. Caching 3: Caching API
• Store objects in memory and pull them
out when you need them
• For data objects, you have to use
DataSets and DataTables, not
DataReaders
10. Caching 3: CacheDependency
• Objects in the cache can be dependent on
other objects
– When the dependency changes, the cached item
is removed
– Not very useful in .NET 1.1
• .NET 2.0 introduced SqlCacheDependency
– Cached objects can be dependent on SQL tables
– Enable using the ASPNET_REGSQL tool
– Or programmatically with the
SqlCacheDependencyAdmin object
– Can integrate with OutputCaching
11. Caching 3: Velocity
• Velocity
– Distributed cache
• One logical cache split across several servers
• PowerShell management console
– CTP3 released April 09
• v1 Summer 09
• SP1 Q4 09
• v2 Summer 2010
– Doesn’t have dependencies – yet
– The future: automatic caching?
• See also NCache and memcached
12. Paging
• Default GridView paging behaviour reads the
entire dataset every time
– For 100 rows this probably isn’t going to matter
– For 1 000 000 rows this probably isn’t so good
• Write your own paging mechanism
• For custom paging DataGrids are better than
GridViews
• In SQL 2005 the ROW_NUMBER function is
your friend!
• LINQ
– Skip
14. ViewState 1
Viewstate Size
Object
in bytes
HTML Table 52
DataList 6628
Repeater 6600
DataGrid 10592
GridView 10928
15. ViewState 2
• Taming Viewstate
– Can be disabled per-control
– ZIP it up and put the zipped version on the
page
– Keep it on the web server
16. Compression 1
• All modern browsers will accept
compressed content
– Content is compressed on the server /
decompressed by the browser
– Can be enabled in IIS
or
– Use the HttpCompress library
18. Compression 2
• JavaScript Compression
– JSMin (http://tinyurl.com/jscriptmin)
– jQuery is pre-minified for you
• CSS Compression
– CSSMin (http://tinyurl.com/cssmin-webdd)
– Written in PHP
19. Summary
• Cache is King!
• Paging is good for your pages!
• Viewstate doesn’t have to be evil!
21. Resources
• Books
– Essential ASP.NET by Fritz Onion
– The ASP.NET 2.0 Cookbook by Michael Gittel & Geoffrey LeBlond
– The ASP.NET Anthology by Scott Allen et al
• PodCasts
– http://www.dotnetrocks.com/default.aspx?showNum=24
– http://www.dotnetrocks.com/default.aspx?showNum=367
• MSDN White Paper on .NET Performance &
Scalability
– http://msdn.microsoft.com/en-us/library/ms998530.aspx
• Strangeloop Networks Scaling Appliance
– http://www.strangeloopnetworks.com/products/AS1000/