<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-13495362</id><updated>2012-02-09T22:00:25.834-06:00</updated><title type='text'>Greg Suvalian's blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://artisticcheese.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://artisticcheese.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Гриша</name><uri>http://www.blogger.com/profile/02172772600654399465</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-13495362.post-4924771671999722868</id><published>2012-02-09T10:52:00.011-06:00</published><updated>2012-02-09T22:00:25.844-06:00</updated><title type='text'>Using URLRewrite to curcumvent limitation of anonymous WebDAV in IIS7</title><content type='html'>IIS7 removed possibility to use anonymous WebDAV and one of the solution proposed to curcumvent this (&lt;a href="http://blogs.msdn.com/b/saurabh_singh/archive/2010/12/10/anonymous-put-in-webdav-on-iis-7-deprecated.aspx"&gt;Here&lt;/a&gt;) was using custom HTTP Module which would inject Basic Authorization header into the stream. &lt;BR&gt;&lt;br /&gt;This works but pretty difficult to implement. First you have to compile assembly, secondly you have to hardcode username and password into DLL without possibility of changing it once deployed. There are some drawbacks to that solution as well since that module is being executed on every incoming request regardless wether it's WebDAV or not.&lt;br /&gt;Instead of that you can just simple use URLRewrite module to do exactly the thing mentioned with no additional complexities mentioned. You need to create rewrite configuration below. You encode desired username password using base64 encoding (for example here &lt;a href="http://www.motobit.com/util/base64-decoder-encoder.asp"&gt;Here&lt;/a&gt;) in format "username:password" and append that &lt;span&gt;value after "Basic" value below.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=3Ze9ZsG5"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13495362-4924771671999722868?l=artisticcheese.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artisticcheese.blogspot.com/feeds/4924771671999722868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13495362&amp;postID=4924771671999722868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/4924771671999722868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/4924771671999722868'/><link rel='alternate' type='text/html' href='http://artisticcheese.blogspot.com/2012/02/using-urlrewrite-in-curcumvential.html' title='Using URLRewrite to curcumvent limitation of anonymous WebDAV in IIS7'/><author><name>Гриша</name><uri>http://www.blogger.com/profile/02172772600654399465</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13495362.post-7437622624302264938</id><published>2010-04-27T13:40:00.003-05:00</published><updated>2010-04-27T13:44:19.113-05:00</updated><title type='text'>Managed Stack Explorer compatible with x64 and IIS 7 environment</title><content type='html'>Hi,&lt;br /&gt;&lt;br /&gt;This is just recompiled version of &lt;a href="http://mse.codeplex.com/"&gt;Managed Stack Explorer&lt;/a&gt; which will run in x64 environment and IIS7.&lt;br /&gt;File is here for &lt;a href="http://mse.codeplex.com/Project/Download/AttachmentDownload.ashx?ProjectName=MSE&amp;WorkItemId=17202&amp;FileAttachmentId=10067"&gt; download&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13495362-7437622624302264938?l=artisticcheese.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artisticcheese.blogspot.com/feeds/7437622624302264938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13495362&amp;postID=7437622624302264938' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/7437622624302264938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/7437622624302264938'/><link rel='alternate' type='text/html' href='http://artisticcheese.blogspot.com/2010/04/managed-stack-explorer-compatible-with.html' title='Managed Stack Explorer compatible with x64 and IIS 7 environment'/><author><name>Гриша</name><uri>http://www.blogger.com/profile/02172772600654399465</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13495362.post-3951542491001075907</id><published>2010-03-05T12:46:00.001-06:00</published><updated>2010-03-05T12:53:01.174-06:00</updated><title type='text'>Virtual CPUs and performance of virtual machine</title><content type='html'>&lt;h2&gt;Performance comparison of multi threaded application in relevance to multiple virtual CPUs in virtual machine&lt;/h2&gt;&lt;br&gt;&lt;br&gt;I was tasked (actually wanted to know myself) if common understanding going around that adding virtual CPUs to virtual machine does not affect performance of such. Idea behind this thought is that since CPU is virtual then hypervisor will be spreading load across physical CPUs anyway and hence additional CPUs will not increase performance of your application.&lt;br&gt;I wanted specifically to test multi threaded application since this is what majority of web servers are.&lt;br&gt;So to test raw CPU performance I acquired 4 CPU IBM box. I wanted to make a test against VM guest running inside ESX 3.5 with different number of virtual CPUs and 1 another test - against physical hardware (no hypervisor).&lt;br&gt;For test itself I wanted something which is very CPU intensive and has no IO dependencies. I figured calculating PI to certain digit will be a good choice in this case.&lt;br&gt;Entire Visual Studio 2008 solution can be downloaded below. It consists of web service which accepts only 1 parameter which is &amp;quot;Number of Digits of PI to be calculated to&amp;quot; and returns back total time taken to calculate that number.&lt;br&gt;Solution also contains sample webpage which will call web service, that page was called by 10 virtual clients simultaneously. Total number of pages served were calculated and presented in table and graph below.&lt;br&gt;&lt;br&gt;Conclusion: Adding more virtual CPUs for multithreaded application does it in fact increase performance of application.&lt;br&gt;&lt;br&gt;&lt;table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable zeroBorder"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border:1pt solid black;width:239.4pt" valign="top" width="319"&gt;&lt;p&gt;&lt;b&gt;Number of logical CPUs&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border-color:black black black -moz-use-text-color;border-style:solid solid solid none;border-width:1pt 1pt 1pt medium;width:239.4pt" valign="top" width="319"&gt;&lt;p&gt;&lt;b&gt;Number of requests served&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-color:-moz-use-text-color black black;border-style:none solid solid;border-width:medium 1pt 1pt;width:239.4pt" valign="top" width="319"&gt;&lt;p&gt;1 CPU&lt;/p&gt;&lt;/td&gt;&lt;td style="border-color:-moz-use-text-color black black -moz-use-text-color;border-style:none solid solid none;border-width:medium 1pt 1pt medium;width:239.4pt" valign="top" width="319"&gt;&lt;p&gt;24&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-color:-moz-use-text-color black black;border-style:none solid solid;border-width:medium 1pt 1pt;width:239.4pt" valign="top" width="319"&gt;&lt;p&gt;2 CPU&lt;/p&gt;&lt;/td&gt;&lt;td style="border-color:-moz-use-text-color black black -moz-use-text-color;border-style:none solid solid none;border-width:medium 1pt 1pt medium;width:239.4pt" valign="top" width="319"&gt;&lt;p&gt;47&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-color:-moz-use-text-color black black;border-style:none solid solid;border-width:medium 1pt 1pt;width:239.4pt" valign="top" width="319"&gt;&lt;p&gt;4 CPU&lt;/p&gt;&lt;/td&gt;&lt;td style="border-color:-moz-use-text-color black black -moz-use-text-color;border-style:none solid solid none;border-width:medium 1pt 1pt medium;width:239.4pt" valign="top" width="319"&gt;&lt;p&gt;65&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-color:-moz-use-text-color black black;border-style:none solid solid;border-width:medium 1pt 1pt;width:239.4pt" valign="top" width="319"&gt;&lt;p&gt;Physical box with 4 CPUs&lt;/p&gt;&lt;/td&gt;&lt;td style="border-color:-moz-use-text-color black black -moz-use-text-color;border-style:none solid solid none;border-width:medium 1pt 1pt medium;width:239.4pt" valign="top" width="319"&gt;&lt;p&gt;70&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div id="odf9" style="text-align:left"&gt;&lt;a href="http://docs.google.com/File?id=ajjjrnfbp28p_162pppf95gv_b" target="_blank"&gt;&lt;img src="http://docs.google.com/File?id=ajjjrnfbp28p_162pppf95gv_b" style="height:457px;width:539px"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Attachment:&lt;a href="http://docs.google.com/leaf?id=0B8pAWfQm4KqYZDE3NjUwYTItNTdmMC00NzNmLTgzZDUtMWMxN2M3MTJhNjhi&amp;amp;hl=en" id="iwcv" title="Download"&gt;Download&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13495362-3951542491001075907?l=artisticcheese.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artisticcheese.blogspot.com/feeds/3951542491001075907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13495362&amp;postID=3951542491001075907' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/3951542491001075907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/3951542491001075907'/><link rel='alternate' type='text/html' href='http://artisticcheese.blogspot.com/2010/03/perfomance-comparison-of-multi-thread.html' title='Virtual CPUs and performance of virtual machine'/><author><name>Гриша</name><uri>http://www.blogger.com/profile/02172772600654399465</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13495362.post-3485048512864003708</id><published>2009-05-22T14:18:00.002-05:00</published><updated>2009-05-22T14:19:51.783-05:00</updated><title type='text'>How to use .NET profiler to troubleshoot ASP.NET page perfomance issues</title><content type='html'>&lt;DIV&gt;How to use .NET profiler to troubleshoot slow ASP.NET page performance&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;I'm frequently tasked to figure out why certain pages or parts of websites are slow (assuming site is ASP.NET based). In this specific article I'll show how to use free .NET profiler from Equatec &lt;A href="http://www.eqatec.com/tools/profiler"&gt;http://www.eqatec.com/tools/profiler&lt;/A&gt;&amp;nbsp;to troubleshoot this issues.&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;My common troubleshooting steps (before diving into ASP.NET website performance troubleshooting are below).&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;OL&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV&gt;Use Fiddler tool (&lt;A href="http://www.fiddler2.com/fiddler2/"&gt;http://www.fiddler2.com/fiddler2/&lt;/A&gt;) to actually measure response time of web page. This works with AJAX based pages as well and will actually provide you information which you usually would not be able to see in browser window (simple GET/POST requests are so 90s in modern technologies).&lt;/DIV&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV&gt;Once you get statistics and confirmed that you do in fact have backend problem other then networking issues I usually see if there are any known dependencies for the page (like SQL backend). This is pretty easy to figure out by looking through web.config file. I start SQL profiler on SQL server afterwards and resubmit request from browser again watching profiler statements coming through. Sometimes troubleshooting ends here (if you see that Execution time of stored procedure or ad-hoc query corresponds to total page response time.&lt;/DIV&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;DIV&gt;At this point if you ruled out backend slowness you are probably looking at some issues within ASP.NET website itself. I usually enable ASP.NET tracing at this point by going to web.config and adding following statement there &lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;P&gt;&lt;/P&gt;&lt;FONT color=#741b47&gt;&amp;lt;trace enabled="true" localOnly="false" pageOutput="true"/&amp;gt;&lt;/FONT&gt;). This will output tracing information (most importanly times to takes to execute specific methods in pipeline). Sometimes it's enough to to see which part of the page pipeline fails. &lt;br /&gt;&lt;DIV style="TEXT-ALIGN: left" id=an43&gt;&lt;A href="http://docs.google.com/File?id=ajjjrnfbp28p_143fx8nxwgr_b" target=_blank&gt;&lt;IMG style="WIDTH: 160px" src="http://docs.google.com/File?id=ajjjrnfbp28p_143fx8nxwgr_b"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV style="TEXT-ALIGN: left" id=r2hp&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;DIV&gt;Please note that page execution times listed trace output are not including times which are spends outside of the page (like authenticating request or processing events in global.asax). So you might see fast execution times in trace output but page will still be slow to render and hence we come to real purpose of this article, i.e. to use .NET profiler to see what is causing page to stall.&lt;/DIV&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;I wrote a sample website where I simulated different stalling conditions. Stalling in pre-page execution pipeline (in global.asax) and stalling inside page itself (SQL call or Web Services call or something of that nature). To simulate long running method I inserted following statement in relevant methods (&lt;FONT size=2&gt;System.Threading.&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;Thread&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.Sleep(5000);&lt;/FONT&gt;). This makes current thread sleep for specified amount of time. I put Tracing statements through the code so you can actually see in screenshot below where latency are being introduced. Lines in red indicate Trace statements in the code. (First one in global.asax Application_BeginRequest event and second one inside Page_Load() statement of default.aspx page). In real life scenario you most likely would not have any Tracing statements in code you'll be troubleshooting though.&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp; &lt;br /&gt;&lt;DIV style="TEXT-ALIGN: left" id=rlck&gt;&lt;A href="http://docs.google.com/File?id=ajjjrnfbp28p_144htx2htfj_b" target=_blank&gt;&lt;IMG style="WIDTH: 160px" src="http://docs.google.com/File?id=ajjjrnfbp28p_144htx2htfj_b"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;I compiled my test website and at this point all I have is what you probably would have in your case. You can download it here (&lt;A id=iure title=ZIP href="http://cid-8e84f381bcb261a8.skydrive.live.com/self.aspx/Public/profile.zip"&gt;ZIP&lt;/A&gt;). Once you installed it, navigate to default.aspx page and see how much it takes to load a page (shall be around 7s or so).&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;Next step is to install Equatec .NET profiler from here (&lt;A id=k2.q title=Here href="http://www.eqatec.com/tools/profiler"&gt;Here&lt;/A&gt;). &lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV&gt;On first run it'll display default screen below&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;&lt;DIV style="TEXT-ALIGN: left" id=twhj&gt;&lt;A href="http://docs.google.com/File?id=ajjjrnfbp28p_145gw66ftd6_b" target=_blank&gt;&lt;IMG style="WIDTH: 160px" src="http://docs.google.com/File?id=ajjjrnfbp28p_145gw66ftd6_b"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV&gt;Click browse button and navigate to installation directory of your website (BIN folder) and open precompiled binary for your application (profiler.dll in this case)&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;DIV style="TEXT-ALIGN: left" id=bl_l&gt;&lt;A href="http://docs.google.com/File?id=ajjjrnfbp28p_146cgfz2rcn_b" target=_blank&gt;&lt;IMG style="WIDTH: 160px" src="http://docs.google.com/File?id=ajjjrnfbp28p_146cgfz2rcn_b"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV&gt;Click "Build" button on bottom. Profiler will inject profiling information into your assembly and output results to the "Bin-Profiled" folder under the same root where your original "Bin" folder is. You'll see that you original DLL file grew up in size because of that.&lt;/DIV&gt;&lt;/LI&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV&gt;Copy all files from "Bin-Profiled" folder to "Bin" folder (replacing files)&lt;/DIV&gt;&lt;/LI&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV&gt;Switch to "Run" tab and navigate to your problem page. You'll notice that Control area will be updated with information "Profiled app Profiler started"&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;&lt;DIV&gt;&lt;A href="http://docs.google.com/File?id=ajjjrnfbp28p_147gqnzzdrq_b" target=_blank&gt;&lt;IMG style="WIDTH: 160px" src="http://docs.google.com/File?id=ajjjrnfbp28p_147gqnzzdrq_b"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV style="TEXT-ALIGN: left"&gt;Click on "Take snapshot" button. It'll generate report about execution time and put report under "View Snapshot reports" area. &lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;&lt;DIV style="TEXT-ALIGN: left"&gt;&lt;A href="http://docs.google.com/File?id=ajjjrnfbp28p_148ggfstdf2_b" target=_blank&gt;&lt;IMG style="WIDTH: 160px" src="http://docs.google.com/File?id=ajjjrnfbp28p_148ggfstdf2_b"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV style="TEXT-ALIGN: left"&gt;Click "View" button now with latest report selected. Result below is exactly what you'd expect to see from test file. Which is first 5 seconds were spent in BeginRequest event and next 2 in Page_Load calling "DoSQLQuery" method.&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;&lt;DIV style="TEXT-ALIGN: left"&gt;&lt;br /&gt;&lt;DIV style="TEXT-ALIGN: left" id=y9qq&gt;&lt;A href="http://docs.google.com/File?id=ajjjrnfbp28p_149cn4wz7gz_b" target=_blank&gt;&lt;IMG style="WIDTH: 160px" src="http://docs.google.com/File?id=ajjjrnfbp28p_149cn4wz7gz_b"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV style="TEXT-ALIGN: left"&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV style="TEXT-ALIGN: left"&gt;Now since you know which specifics methods take that much time you need to take a look at what is being done inside those methods. In this case (and probably yours) you'll just have assembly (profile.dll). You need to use tool like .NET Reflector (&lt;A id=kmgf title="Download here" href="http://www.red-gate.com/products/reflector/"&gt;Download here&lt;/A&gt;) to see contents in readable form.&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;&lt;DIV style="TEXT-ALIGN: left"&gt;&amp;nbsp; &lt;br /&gt;&lt;DIV style="TEXT-ALIGN: left" id=l4-m&gt;&lt;A href="http://docs.google.com/File?id=ajjjrnfbp28p_150wvvp8kc4_b" target=_blank&gt;&lt;IMG style="WIDTH: 160px" src="http://docs.google.com/File?id=ajjjrnfbp28p_150wvvp8kc4_b"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV style="TEXT-ALIGN: left"&gt;Now we can see exactly why it took so long to execute this specific method. In your case it might be SQL call or web services or call or something of that nature.&lt;/DIV&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;P id=temp_br&gt;&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13495362-3485048512864003708?l=artisticcheese.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artisticcheese.blogspot.com/feeds/3485048512864003708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13495362&amp;postID=3485048512864003708' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/3485048512864003708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/3485048512864003708'/><link rel='alternate' type='text/html' href='http://artisticcheese.blogspot.com/2009/05/how-to-use-net-profiler-to-troublesh.html' title='How to use .NET profiler to troubleshoot ASP.NET page perfomance issues'/><author><name>Гриша</name><uri>http://www.blogger.com/profile/02172772600654399465</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13495362.post-3871310259282111860</id><published>2009-04-06T11:43:00.001-05:00</published><updated>2009-04-06T12:26:13.814-05:00</updated><title type='text'>Instructions how to enable SSTP VPN s...</title><content type='html'>&lt;H2&gt;Instructions how to enable SSTP VPN server in Windows 2008 simplified &lt;/H2&gt;&lt;br /&gt;&lt;H3&gt;In this brief 10 minutes procedure below you'll learn how to create VPN connection using SSTP (SSL tunnel) to your work/home location from anywhere where HTTPS is allowed. &lt;/H3&gt;&lt;br /&gt;&lt;DIV&gt;Guide below assumes you don't want to use your VPN server as Internet Router and you have some other devices doing routing. Steps below will allow you to VPN in your remote location and route everything (including Internet traffic) through that VPN connection.&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;Difference from other guides on Internet: &lt;/DIV&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;&lt;LI&gt;Don't need domain controller or certificate services for this to work &lt;br /&gt;&lt;LI&gt;Don't need 2 network adapters on your server to work &lt;br /&gt;&lt;LI&gt;Don't need to publish SSL CRL (certificate revocation list) &lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;&lt;DIV&gt;What is needed: &lt;/DIV&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;&lt;LI&gt;Server SSL certificate (self-signed) &lt;br /&gt;&lt;LI&gt;Windows 2008 on your local network (single NIC) &lt;br /&gt;&lt;LI&gt;Vista SP1 or later &lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;&lt;DIV&gt;Steps:&amp;nbsp;&amp;nbsp; &lt;/DIV&gt;&lt;br /&gt;&lt;OL&gt;&lt;br /&gt;&lt;LI&gt;Create self-signed certificate and import it into certificate store on client and server &lt;br /&gt;&lt;UL&gt;&lt;br /&gt;&lt;LI&gt;Create self-signed certificate with domain name which you'll be using for your VPN server. I used this excellent utility (&lt;A href="http://www.pluralsight.com/community/blogs/keith/archive/2009/01/22/create-self-signed-x-509-certificates-in-a-flash-with-self-cert.aspx"&gt;http://www.pluralsight.com/community/blogs/keith/archive/2009/01/22/create-self-signed-x-509-certificates-in-a-flash-with-self-cert.aspx&lt;/A&gt;). What you want to do is to put CN name as external name which you'll be using for your VPN server (like sstp.mydomain.com) and choose to export as PFX file. This will create PFX file with your certificate and designated location. In steps below it would be imported into client and server as Trusted CA. &lt;br /&gt;&lt;UL&gt;&lt;br /&gt;&lt;LI&gt;Import certificate on client computer by following this steps: Launch MMC and choose Add Snap-in, choose "Certificates", on next screen choose "Local Computer" and then choose "Trusted Root Certification Authorities" and import your certificate into that store. &lt;br /&gt;&lt;LI&gt;Import certificate on server computer exactly the same ways it was done on client.&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;&lt;LI&gt;Enabled RRAS role on Windows 2008 and configure SSTP. &lt;br /&gt;&lt;UL&gt;&lt;br /&gt;&lt;LI&gt;Install RRAS service on your server &lt;br /&gt;&lt;UL&gt;&lt;br /&gt;&lt;LI&gt;Add Server Role called "Network Policy and Access Services". Choose only "Remote Access Service" for service since we don't need routing. Go through installation process. &lt;br /&gt;&lt;LI&gt;Once server is setup, launch Routing and Remote Access MMC and choose to "Configure Routing and Remote Access server". &lt;br /&gt;&lt;LI&gt;Choose "Custom Configuration" and choose "VPN access". &lt;br /&gt;&lt;LI&gt;For your user go to user property pages. Choose "Dial-in" tab and choose "Allow access" under "Network Access Permission".&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;&lt;LI&gt;Configure your external router to port forward TCP 443 to your internal IP of your VPN server.&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;&lt;LI&gt;Configure your Vista VPN client. &lt;br /&gt;&lt;UL&gt;&lt;br /&gt;&lt;LI&gt;Go to Network And Sharing Center/Setup Connection or network/Connect to a workplace. Choose "Use Internet Connection", put your hostname for connection and go through the rest of the steps. Use "skip" since connection will probably fail since we need to configure connection to use SSTP. Once connection is created, go to properties of connection/Networking and choose as type of VPN - SSTP, uncheck IpV6 since you don't need at this point.&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;At this point you shall be able to VPN into your remote home/office.&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp; &lt;/DIV&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13495362-3871310259282111860?l=artisticcheese.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artisticcheese.blogspot.com/feeds/3871310259282111860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13495362&amp;postID=3871310259282111860' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/3871310259282111860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/3871310259282111860'/><link rel='alternate' type='text/html' href='http://artisticcheese.blogspot.com/2009/04/instructions-how-to-enable-sstp-vpn-s.html' title='Instructions how to enable SSTP VPN s...'/><author><name>Гриша</name><uri>http://www.blogger.com/profile/02172772600654399465</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13495362.post-4497529278202686142</id><published>2008-08-08T10:40:00.000-05:00</published><updated>2009-04-06T11:31:49.808-05:00</updated><title type='text'></title><content type='html'>&lt;DIV id=vc0p&gt;This is test I did in school when I was 10 years old (3d grade). See if your 10-11 old child will be able to make it. (Test for 7 year olds below this post)&lt;/DIV&gt; &lt;DIV id=vc0p0&gt; &lt;/DIV&gt; &lt;DIV id=vc0p1&gt;Test 1.&lt;/DIV&gt; &lt;DIV id=x-59&gt; &lt;/DIV&gt; &lt;DIV id=x-590&gt;Airplane needs to fly between 2 cities, distance between cities is 4150 km. First 2 hours airplane was flying 676 kmh, then 3 hours was flying with speed 760 kmh. &lt;/DIV&gt; &lt;DIV id=p-dw&gt;Question: How many km is left to fly?&lt;/DIV&gt; &lt;DIV id=x-591&gt; &lt;/DIV&gt; &lt;DIV id=x-592&gt;Test 2.&lt;/DIV&gt; &lt;DIV id=dirn&gt; &lt;/DIV&gt; &lt;DIV id=qjx3&gt;Swimmer had swam 448 laps in first day. On second day he was swimming 2 hours less then first day and swam total of 336 laps. &lt;/DIV&gt; &lt;DIV id=p-dw0&gt;Question: How many total hours swimmer was swimming on first day and on second day?&lt;/DIV&gt; &lt;DIV id=mmim&gt; &lt;/DIV&gt; &lt;DIV id=mmim0&gt;Test 3.&lt;/DIV&gt; &lt;DIV id=mmim1&gt; &lt;/DIV&gt; &lt;DIV id=mmim2&gt;Your yard is 45 m in length and 24 m in width. What is perimeter of your yard?&lt;/DIV&gt; &lt;DIV id=p8rl&gt; &lt;/DIV&gt; &lt;DIV id=p8rl0&gt;Below answers from original paperwork filed in 1981&lt;/DIV&gt; &lt;DIV id=p5:3&gt; &lt;DIV id=c030 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG id=tz3o src="http://docs.google.com/File?id=ajjjrnfbp28p_111gjftdwdq_b"&gt;&lt;/DIV&gt; &lt;/DIV&gt; &lt;DIV id=p5:30&gt; &lt;DIV id=i0fd style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG id=zl50 src="http://docs.google.com/File?id=ajjjrnfbp28p_112dsq4x7dn_b"&gt;&lt;/DIV&gt;   &lt;DIV id=gj73 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG id=zl500 src="http://docs.google.com/File?id=ajjjrnfbp28p_113czmnd2fx_b"&gt;&lt;/DIV&gt; &lt;DIV id=yr8c style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG id=zl501 src="http://docs.google.com/File?id=ajjjrnfbp28p_114fbdxzqgf_b"&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13495362-4497529278202686142?l=artisticcheese.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artisticcheese.blogspot.com/feeds/4497529278202686142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13495362&amp;postID=4497529278202686142' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/4497529278202686142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/4497529278202686142'/><link rel='alternate' type='text/html' href='http://artisticcheese.blogspot.com/2008/08/this-is-test-i-did-in-school-when-i-was.html' title=''/><author><name>Гриша</name><uri>http://www.blogger.com/profile/02172772600654399465</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13495362.post-6312063593087286787</id><published>2008-08-08T10:24:00.000-05:00</published><updated>2009-04-06T11:31:49.811-05:00</updated><title type='text'></title><content type='html'>&lt;DIV id=abld&gt;This is test which I did at the end of 1st grade in Moscow School on May 17th, 1978 when I was 7 years old. &lt;/DIV&gt; &lt;DIV id=n9x9&gt;See if your 7-8 year old child can answer questions below.&lt;/DIV&gt; &lt;DIV id=lojy&gt; &lt;/DIV&gt; &lt;DIV id=lojy0&gt;Test 1.&lt;/DIV&gt; &lt;DIV id=lojy1&gt;There are 27 airplanes and 16 helicopters at airport. 18 aircrafts took off. Question: How many aircrafts left at airport?&lt;/DIV&gt; &lt;DIV id=n0u1&gt; &lt;/DIV&gt; &lt;DIV id=n0u10&gt;Test 2.&lt;/DIV&gt; &lt;UL id=bj01&gt; &lt;LI id=bj010&gt; &lt;DIV id=n0u11&gt;64 + 23 = ?&lt;/DIV&gt;&lt;/LI&gt; &lt;LI id=bj011&gt; &lt;DIV id=n0u12&gt;14 - 8 = ?&lt;/DIV&gt;&lt;/LI&gt; &lt;LI id=bj012&gt; &lt;DIV id=kxcq&gt;48 + 5 = ?&lt;/DIV&gt;&lt;/LI&gt; &lt;LI id=bj013&gt; &lt;DIV id=kxcq0&gt;53 + 27 = ?&lt;/DIV&gt;&lt;/LI&gt; &lt;LI id=bj014&gt; &lt;DIV id=kxcq1&gt;9 + 6 = ?&lt;/DIV&gt;&lt;/LI&gt; &lt;LI id=bj015&gt; &lt;DIV id=kxcq2&gt;90 - 26 = ?&lt;/DIV&gt;&lt;/LI&gt; &lt;LI id=bj016&gt; &lt;DIV id=w1oa&gt;Put &amp;lt;,&amp;gt;,= between 20-6 and 20-9&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;DIV id=bj017&gt; &lt;/DIV&gt; &lt;DIV id=bj018&gt; &lt;DIV id=c1zr style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG id=r-j4 src="http://docs.google.com/File?id=ajjjrnfbp28p_108fhmgw5fb_b"&gt;&lt;/DIV&gt; &lt;DIV id=r-j40 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;/DIV&gt; &lt;DIV id=r-j41 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;DIV id=zl9- style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG id=r-j42 src="http://docs.google.com/File?id=ajjjrnfbp28p_109c3f8j8gc_b"&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt; &lt;DIV id=bj019&gt; &lt;/DIV&gt; &lt;DIV id=abld0&gt; &lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13495362-6312063593087286787?l=artisticcheese.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artisticcheese.blogspot.com/feeds/6312063593087286787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13495362&amp;postID=6312063593087286787' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/6312063593087286787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/6312063593087286787'/><link rel='alternate' type='text/html' href='http://artisticcheese.blogspot.com/2008/08/this-is-test-which-i-did-at-end-of-1st.html' title=''/><author><name>Гриша</name><uri>http://www.blogger.com/profile/02172772600654399465</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13495362.post-319229395912763887</id><published>2008-08-04T20:17:00.001-05:00</published><updated>2008-08-04T20:19:57.603-05:00</updated><title type='text'>SSLScavenger available at codeplex</title><content type='html'>If you work in environment with a lot of SSL sites and need to keep track of SSL certificates and their expiration dates you might find this utility usefull.&lt;br /&gt;You can download it from &lt;a href="http://www.codeplex.com/sslscavenger/"&gt;http://www.codeplex.com/sslscavenger/&lt;/a&gt;.&lt;br /&gt;It provides output in XML file if any of certificates are already expired or about to expire in 30 day period.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13495362-319229395912763887?l=artisticcheese.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artisticcheese.blogspot.com/feeds/319229395912763887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13495362&amp;postID=319229395912763887' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/319229395912763887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/319229395912763887'/><link rel='alternate' type='text/html' href='http://artisticcheese.blogspot.com/2008/08/sslscavenger-available-at-codeplex.html' title='SSLScavenger available at codeplex'/><author><name>Гриша</name><uri>http://www.blogger.com/profile/02172772600654399465</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13495362.post-6728640216383082985</id><published>2008-06-05T16:30:00.003-05:00</published><updated>2008-06-05T16:47:32.748-05:00</updated><title type='text'>The best of freeware I find usefull</title><content type='html'>&lt;strong&gt;Free remote access&lt;/strong&gt; to home or office computers. All software and services listed below are completely free.&lt;br /&gt;&lt;ol&gt;&lt;li&gt; &lt;a href="http://www.logmein.com/"&gt;http://www.logmein.com/&lt;/a&gt; has a free version of their product which will allow you to access any of your machines having LogMeIn installed form anywhere in the world. Current version supports popular features like multi monitor, clipboard sharing, chat.&lt;/li&gt;&lt;li&gt;If you need instantaneous and fast desktop sharing with your peer I'd recommend &lt;a href="http://www.crossloop.com/"&gt;http://www.crossloop.com&lt;/a&gt; which is very easy to install and use. It's based on well established VNC based remote desktop access. Excellent choice if you need quickly connect to your peer.&lt;/li&gt;&lt;li&gt;&lt;a href="http://ww.livemesh.com/"&gt;http://ww.livemesh.com&lt;/a&gt; is in tech preview currently allows you to access your own remote computers and also supports file synchronisation both offline and online between devices.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13495362-6728640216383082985?l=artisticcheese.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artisticcheese.blogspot.com/feeds/6728640216383082985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13495362&amp;postID=6728640216383082985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/6728640216383082985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/6728640216383082985'/><link rel='alternate' type='text/html' href='http://artisticcheese.blogspot.com/2008/06/best-of-freeware-i-find-usefull-series.html' title='The best of freeware I find usefull'/><author><name>Гриша</name><uri>http://www.blogger.com/profile/02172772600654399465</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13495362.post-4311282404770488604</id><published>2008-04-04T13:05:00.008-05:00</published><updated>2008-04-04T13:22:49.502-05:00</updated><title type='text'>Desktop heap issues and troubleshooting them</title><content type='html'>I had weird behaviour on my desktop for the last couple of days. Windows would not open, windows which would open will miss items on them or tabs.&lt;br /&gt;I immediately suspected desktop heap issues which I run into before (becouse I have 3 monitors). I checked registry key (HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows), SharedSection=1024,3072,512. Last number in that value is recommended value Microsoft suggests if there are any issues with desktop heap performance.&lt;br /&gt;Apparently I had already value set and was still experiencing issues.&lt;br /&gt;Next stop is to actually verify this issue is in fact relevant to heap exhaustion.&lt;br /&gt;You need to download and install tool called dheapmon from location below&lt;br /&gt;Dheapmon (Desktop Heap Monitor)&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=5CFC9B74-97AA-4510-B4B9-B2DC98C8ED8B&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=5CFC9B74-97AA-4510-B4B9-B2DC98C8ED8B&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=5CFC9B74-97AA-4510-B4B9-B2DC98C8ED8B&amp;amp;displaylang=en&lt;/a&gt;&lt;br /&gt;Results of running that tool on my desktop are below&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;C:\kktools\dheapmon8.1\x86&gt;dheapmon -s&lt;br /&gt;Desktop Heap Information Monitor Tool (Version 8.1.2925.0)&lt;br /&gt;Copyright (c) Microsoft Corporation.  All rights reserved.&lt;br /&gt;-------------------------------------------------------------&lt;br /&gt;  Session ID:    0 Total Desktop: (  5824 KB -    8 desktops)&lt;br /&gt;&lt;br /&gt;  WinStation\Desktop            Heap Size(KB)    Used Rate(%)&lt;br /&gt;-------------------------------------------------------------&lt;br /&gt;  WinSta0\Default                    3072             93.3&lt;br /&gt;  WinSta0\Disconnect                   64              4.5&lt;br /&gt;  WinSta0\Winlogon                    128              9.4&lt;br /&gt;  Service-0x0-3e7$\Default            512             24.8&lt;br /&gt;  Service-0x0-3e4$\Default            512              7.4&lt;br /&gt;  Service-0x0-3e5$\Default            512              2.4&lt;br /&gt;  SAWinSta\SADesktop                  512              0.5&lt;br /&gt;  msswindowstation\mssrestricteddesk    512              0.5&lt;br /&gt;-------------------------------------------------------------&lt;br /&gt; &lt;/pre&gt;&lt;p&gt;&lt;br /&gt;It's clear that WinSta0\Default is causing all the pr0blems. This desktop is actual desktop I'm using so one of processes running under my account caused heap exhaustion. I did not found a way to find what is on that heap, so had to go through easiest way. Open task manager, and sort processes owned by my user account and start killing them one by one while refreshing dheapmon output while doing so.&lt;/p&gt;&lt;p&gt;After 3 proccesses which were killed which did not yeld any results, I killed "Microsoft Office Communicator 2005" which dropped heap use from 90% to 40%.&lt;/p&gt;&lt;p&gt;&lt;pre&gt;&lt;br /&gt;C:\kktools\dheapmon8.1\x86&gt;dheapmon -v -w WinSta0 -d Default&lt;br /&gt;Desktop Heap Information Monitor Tool (Version 8.1.2925.0)&lt;br /&gt;Copyright (c) Microsoft Corporation.  All rights reserved.&lt;br /&gt;-------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;  Windowstation: (WinSta0) SessionID: 0&lt;br /&gt;  Desktop: (Default) Addr: b96d0000&lt;br /&gt;&lt;br /&gt;  Desktop Heap         3145728 (0x  300000) Bytes&lt;br /&gt;  Committed            3141632 (0x  2ff000) Bytes&lt;br /&gt;  Uncommitted             4096 (0x    1000) Bytes&lt;br /&gt;  Allocated            1283816 (0x  1396e8) Bytes&lt;br /&gt;  Total Freed          1857816 (0x  1c5918) Bytes&lt;br /&gt;  Unused               1861912 (0x  1c6918) Bytes&lt;br /&gt;  Used Rate                    (      40.8) %&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;I'm yet to reproduce this issue again to raise question with MS&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13495362-4311282404770488604?l=artisticcheese.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artisticcheese.blogspot.com/feeds/4311282404770488604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13495362&amp;postID=4311282404770488604' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/4311282404770488604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/4311282404770488604'/><link rel='alternate' type='text/html' href='http://artisticcheese.blogspot.com/2008/04/desktop-heap-issues-and-troubleshooting.html' title='Desktop heap issues and troubleshooting them'/><author><name>Гриша</name><uri>http://www.blogger.com/profile/02172772600654399465</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13495362.post-4419076221599959206</id><published>2008-04-02T08:27:00.000-05:00</published><updated>2008-04-02T08:59:15.166-05:00</updated><title type='text'></title><content type='html'>&lt;H2 id=mjl_&gt;Stackoverflow exception analysis in crashed .NET 2.0 application &lt;/H2&gt; &lt;P id=vlwz&gt;This is second crash analysis I had to perform to find out what is causing web process to crash. Prerequisite as in original crash analysis are Windows Debugging Tools installed (WinDbg), point symbols locations to Microsoft download servers and load SOS for .NET 2.0 to see clr related objects. Commands entered by me and in bold letters, debugger output is in gray, areas of interest are in red. Detailed information about prerequisites are in previous blog in 2007.&lt;/P&gt; &lt;BLOCKQUOTE id=oiuq&gt;&lt;FONT id=et53 color=#666666&gt;Microsoft (R) Windows Debugger  Version 6.7.0005.1&lt;BR id=oybq&gt;Copyright (c) Microsoft Corporation. All rights reserved. &lt;/FONT&gt; &lt;P id=vdsj&gt;&lt;FONT id=cc.h color=#666666&gt;Extracted C:DOCUME~1GSUVAL~1LOCALS~1Temp10000137c0_mdmpmem.hdmp from&lt;BR id=xqbv&gt;    C:WINDOWSPCHealthERRORREPQSIGNOFF47D95C22.cab &lt;/FONT&gt;&lt;/P&gt; &lt;P id=etpv&gt;&lt;FONT id=k:st color=#666666&gt;Loading Dump File [C:DOCUME~1GSUVAL~1LOCALS~1Temp10000137c0_mdmpmem.hdmp]&lt;BR id=e70w&gt;User Mini Dump File: Only registers, stack and portions of memory are available &lt;/FONT&gt;&lt;/P&gt; &lt;P id=hvrg&gt;&lt;FONT id=cnf7 color=#666666&gt;Symbol search path is: SRV*c:symbols*http://msdl.microsoft.com/download/symbols&lt;BR id=ruk1&gt;Executable search path is:&lt;BR id=swt9&gt;Windows Server 2003 Version 3790 (Service Pack 1) MP (4 procs) Free x86 compatible&lt;BR id=m3ye&gt;Product: Server, suite: Enterprise TerminalServer SingleUserTS&lt;BR id=nz0_&gt;Debug session time: Tue Apr  1 21:09:53.000 2008 (GMT-5)&lt;BR id=i6yr&gt;System Uptime: not available&lt;BR id=ve0.&gt;Process Uptime: 0 days 5:06:56.000&lt;BR id=xgpc&gt;.....................................................................................................................&lt;BR id=q6:p&gt;The call to LoadLibrary(exts) failed, Win32 error 0n2&lt;BR id=sn53&gt;    "The system cannot find the file specified."&lt;BR id=wz05&gt;Please check your debugger configuration and/or network access.&lt;BR id=eek2&gt;The call to LoadLibrary(ntsdexts) failed, Win32 error 0n2&lt;BR id=wv6i&gt;    "The system cannot find the file specified."&lt;BR id=cvon&gt;Please check your debugger configuration and/or network access.&lt;BR id=pncs&gt;This dump file has an exception of interest stored in it.&lt;BR id=z5_s&gt;The stored exception information can be accessed via .ecxr.&lt;BR id=pk4_&gt;(ab4.11d0): Unknown exception - code e053534f (first/second chance not available)&lt;BR id=f_mu&gt;eax=00a80000 ebx=77e670da ecx=00000019 edx=0000001c esi=00000154 edi=00000000&lt;BR id=k8t8&gt;eip=7c82ed54 esp=01af3de8 ebp=01af3e58 iopl=0         nv up ei ng nz ac pe cy&lt;BR id=h.k9&gt;cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00200297&lt;BR id=nnln&gt;ntdll!KiFastSystemCallRet:&lt;BR id=l0p2&gt;7c82ed54 c3              ret &lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt; &lt;P id=gyty&gt;Load sos.dll from your .NET 2.0 directory with command below to enable .NET managed code access&lt;/P&gt; &lt;P id=jji2&gt; &lt;/P&gt; &lt;BLOCKQUOTE id=rlw8&gt;&lt;FONT id=reff color=#666666&gt;0:014&amp;gt; &lt;B id=lk48&gt;&lt;FONT id=svo. color=#000000&gt;.load C:WINDOWSMicrosoft.NETFrameworkv2.0.50727sos.dll&lt;/FONT&gt;&lt;/B&gt;&lt;BR id=bexe&gt;------------------------------------------------------------&lt;BR id=cc_2&gt;sos.dll needs a full memory dump for complete functionality.&lt;BR id=vhcz&gt;You can create one with .dump /ma &amp;lt;filename&amp;gt;&lt;BR id=ldy8&gt;------------------------------------------------------------  &lt;/FONT&gt;&lt;/BLOCKQUOTE&gt; &lt;P id=w6j.&gt;See what managed exception you got (print exception), we can see that we got Exception of type StackOverflowException&lt;/P&gt; &lt;P id=h.:b&gt; &lt;/P&gt; &lt;BLOCKQUOTE id=galn&gt;&lt;FONT id=vyb0 color=#666666&gt;0:014&amp;gt; &lt;FONT id=i7p. color=#000000&gt;&lt;B id=rg24&gt;!pe&lt;/B&gt;&lt;BR id=d.4n&gt;&lt;/FONT&gt;Exception object: 142d00a4&lt;BR id=vapv&gt;Exception type: System.StackOverflowException&lt;BR id=qec7&gt;Message: &amp;lt;none&amp;gt;&lt;BR id=x46o&gt;InnerException: &amp;lt;none&amp;gt;&lt;BR id=o80g&gt;StackTrace (generated):&lt;BR id=r_j4&gt;&amp;lt;none&amp;gt;&lt;BR id=a2u9&gt;StackTraceString: &amp;lt;none&amp;gt;&lt;BR id=u410&gt;HResult: 800703e9  &lt;/FONT&gt;&lt;/BLOCKQUOTE&gt; &lt;P id=u430&gt;Now we need to see what we got on CLR stack by executing command below. You can see that there is infinite loop of cache being inserted and CacheitemRemovedCallback being called on that event. This documented issue (&lt;A id=vjpp href="http://blogs.msdn.com/yangxind/archive/2005/12/20/506151.aspx"&gt;http://blogs.msdn.com/yangxind/archive/2005/12/20/506151.aspx&lt;/A&gt;) and solution is to use Cache.Add instead of Cache.Insert statement for .NET 2.0 applications. &lt;/P&gt; &lt;P id=iost&gt; &lt;/P&gt; &lt;BLOCKQUOTE id=t7xt&gt;&lt;FONT id=iopr color=#666666&gt;0:014&amp;gt; &lt;/FONT&gt;&lt;FONT id=xiki color=#666666&gt;&lt;B id=h:q_&gt;&lt;FONT id=toit color=#000000&gt;!clrstack&lt;/FONT&gt;&lt;BR id=s6yj&gt;&lt;/B&gt;OS Thread Id: 0x11d0 (14)&lt;BR id=in.b&gt;ESP       EIP    &lt;BR id=j.dr&gt;01af4b24 7c82ed54 [FaultingExceptionFrame: 01af4b24]&lt;BR id=mmwg&gt;01af5104 7c82ed54 [HelperMethodFrame: 01af5104]&lt;BR id=bblk&gt;01af5170 7a608d56 System.Net.Sockets.Socket.MultipleSend(System.Net.BufferOffsetSize[], System.Net.Sockets.SocketFlags)&lt;BR id=rnxh&gt;01af51b4 7a5d43b7 System.Net.Sockets.NetworkStream.MultipleWrite(System.Net.BufferOffsetSize[])&lt;BR id=o-30&gt;01af51f4 7a5af41d System.Net.Connection.Write(System.Net.ScatterGatherBuffers)&lt;BR id=jukw&gt;01af51fc 7a5b1433 System.Net.ConnectStream.ResubmitWrite(System.Net.ConnectStream, Boolean)&lt;BR id=cx_n&gt;01af525c 7a57f835 System.Net.HttpWebRequest.EndWriteHeaders_Part2()&lt;BR id=o3o8&gt;01af528c 7a57e002 System.Net.HttpWebRequest.SetRequestContinue(System.Net.CoreResponseData)&lt;BR id=ttav&gt;01af52a8 7a5af3be System.Net.Connection.ReadComplete(Int32, System.Net.WebExceptionStatus)&lt;BR id=cy0c&gt;01af52e8 7a5af008 System.Net.Connection.SyncRead(System.Net.HttpWebRequest, Boolean, Boolean)&lt;BR id=blrh&gt;01af533c 7a5aede2 System.Net.Connection.PollAndRead(System.Net.HttpWebRequest, Boolean)&lt;BR id=e2e6&gt;01af5350 7a5b412b System.Net.ConnectStream.PollAndRead(Boolean)&lt;BR id=rap2&gt;01af535c 7a57f697 System.Net.HttpWebRequest.EndWriteHeaders(Boolean)&lt;BR id=qqb:&gt;01af538c 7a57dee2 System.Net.HttpWebRequest.WriteHeadersCallback(System.Net.WebExceptionStatus, System.Net.ConnectStream, Boolean)&lt;BR id=el-o&gt;01af5398 7a5b40f6 System.Net.ConnectStream.WriteHeaders(Boolean)&lt;BR id=qaa4&gt;01af53e4 7a57f4da System.Net.HttpWebRequest.EndSubmitRequest()&lt;BR id=y9b2&gt;01af5410 7a57c78b System.Net.HttpWebRequest.CheckDeferredCallDone(System.Net.ConnectStream)&lt;BR id=tssn&gt;01af5420 7a57ca5e System.Net.HttpWebRequest.GetResponse()&lt;BR id=rc_0&gt;01af5468 6990bf7d System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(System.Net.WebRequest)&lt;BR id=grs5&gt;01af5498 6990c915 System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(System.Net.WebRequest)&lt;BR id=p5wd&gt;01af549c 69919eb1 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(System.String, System.Object[])&lt;BR id=u3-.&gt;01af54e0 03745370 eServiceWS.eServiceLiteWS.getListofServiceRequestAreaSubArea()&lt;BR id=srdc&gt;01af54ec 037450b4 Controller.GetLOVList(LOVTypes)&lt;BR id=csfy&gt;01af5530 01d3bb07 StaticCache.onAreaSubAreaLOVRemove(System.String, System.Object, System.Web.Caching.CacheItemRemovedReason)&lt;BR id=if4b&gt;01af5584 6601e362 System.Web.Caching.CacheEntry.&lt;FONT id=yday color=#ff0000&gt;&lt;B id=gl39&gt;CallCacheItemRemovedCallback&lt;/B&gt;&lt;/FONT&gt;(System.Web.Caching.CacheItemRemovedCallback, System.Web.Caching.CacheItemRemovedReason)&lt;BR id=lnq1&gt;01af55c0 6601e60d System.Web.Caching.CacheEntry.Close(System.Web.Caching.CacheItemRemovedReason)&lt;BR id=sid0&gt;01af55fc 6630239c System.Web.Caching.CacheSingle.UpdateCache(System.Web.Caching.CacheKey, System.Web.Caching.CacheEntry, Boolean, System.Web.Caching.CacheItemRemovedReason, System.Object ByRef)&lt;BR id=hu7j&gt;01af56cc 65fa82ea System.Web.Caching.CacheMultiple.UpdateCache(System.Web.Caching.CacheKey, System.Web.Caching.CacheEntry, Boolean, System.Web.Caching.CacheItemRemovedReason, System.Object ByRef)&lt;BR id=niph&gt;01af56f0 65fa8e2a System.Web.Caching.CacheInternal.DoInsert(Boolean, System.String, System.Object, System.Web.Caching.CacheDependency, System.DateTime, System.TimeSpan, System.Web.Caching.CacheItemPriority, System.Web.Caching.CacheItemRemovedCallback, Boolean)&lt;BR id=u-jh&gt;01af574c 6601bc92 System.Web.Caching.Cache.Insert(System.String, System.Object, System.Web.Caching.CacheDependency, System.DateTime, System.TimeSpan, System.Web.Caching.CacheItemPriority, System.Web.Caching.CacheItemRemovedCallback)&lt;BR id=b32t&gt;01af5784 01d3bb8d StaticCache.onAreaSubAreaLOVRemove(System.String, System.Object, System.Web.Caching.CacheItemRemovedReason)&lt;BR id=n.9n&gt;01af57d8 6601e362 System.Web.Caching.CacheEntry.CallCacheItemRemovedCallback(System.Web.Caching.CacheItemRemovedCallback, System.Web.Caching.CacheItemRemovedReason)&lt;BR id=j68q&gt;01af5814 6601e60d System.Web.Caching.CacheEntry.Close(System.Web.Caching.CacheItemRemovedReason)&lt;BR id=o6nh&gt;01af5850 6630239c System.Web.Caching.CacheSingle.UpdateCache(System.Web.Caching.CacheKey, System.Web.Caching.CacheEntry, Boolean, System.Web.Caching.CacheItemRemovedReason, System.Object ByRef)&lt;BR id=jq9y&gt;01af5920 65fa82ea System.Web.Caching.CacheMultiple.UpdateCache(System.Web.Caching.CacheKey, System.Web.Caching.CacheEntry, Boolean, System.Web.Caching.CacheItemRemovedReason, System.Object ByRef)&lt;BR id=guc:&gt;01af5944 65fa8e2a System.Web.Caching.CacheInternal.DoInsert(Boolean, System.String, System.Object, System.Web.Caching.CacheDependency, System.DateTime, System.TimeSpan, System.Web.Caching.CacheItemPriority, System.Web.Caching.CacheItemRemovedCallback, Boolean)&lt;BR id=o1tq&gt;01af59a0 6601bc92 System.Web.Caching.Cache.Insert(System.String, System.Object, System.Web.Caching.CacheDependency, System.DateTime, System.TimeSpan, System.Web.Caching.CacheItemPriority, System.Web.Caching.CacheItemRemovedCallback)&lt;BR id=wx6x&gt;01af59d8 01d3bb8d StaticCache.onAreaSubAreaLOVRemove(System.String, System.Object, System.Web.Caching.CacheItemRemovedReason)&lt;BR id=w8:g&gt;01af5a2c 6601e362 System.Web.Caching.CacheEntry.CallCacheItemRemovedCallback(System.Web.Caching.CacheItemRemovedCallback, System.Web.Caching.CacheItemRemovedReason)&lt;BR id=vnsm&gt;01af5a68 6601e60d System.Web.Caching.CacheEntry.Close(System.Web.Caching.CacheItemRemovedReason)&lt;BR id=dnz6&gt;01af5aa4 6630239c System.Web.Caching.CacheSingle.UpdateCache(System.Web.Caching.CacheKey, System.Web.Caching.CacheEntry, Boolean, System.Web.Caching.CacheItemRemovedReason, System.Object ByRef)&lt;BR id=duf7&gt;01af5b74 65fa82ea System.Web.Caching.CacheMultiple.UpdateCache(System.Web.Caching.CacheKey, System.Web.Caching.CacheEntry, Boolean, System.Web.Caching.CacheItemRemovedReason, System.Object ByRef)&lt;BR id=lvqw&gt;01af5b98 65fa8e2a System.Web.Caching.CacheInternal.DoInsert(Boolean, System.String, System.Object, System.Web.Caching.CacheDependency, System.DateTime, System.TimeSpan, System.Web.Caching.CacheItemPriority, System.Web.Caching.CacheItemRemovedCallback, Boolean)&lt;BR id=arak&gt;01af5bf4 6601bc92 System.Web.Caching.Cache.Insert(System.String, System.Object, System.Web.Caching.CacheDependency, System.DateTime, System.TimeSpan, System.Web.Caching.CacheItemPriority, System.Web.Caching.CacheItemRemovedCallback)&lt;BR id=yk1e&gt;01af5c2c 01d3bb8d StaticCache.onAreaSubAreaLOVRemove(System.String, System.Object, System.Web.Caching.CacheItemRemovedReason)&lt;BR id=uatk&gt;01af5c80 6601e362 System.Web.Caching.CacheEntry.CallCacheItemRemovedCallback(System.Web.Caching.CacheItemRemovedCallback, System.Web.Caching.CacheItemRemovedReason)&lt;BR id=yk13&gt;01af5cbc 6601e60d System.Web.Caching.CacheEntry.Close(System.Web.Caching.CacheItemRemovedReason)&lt;BR id=d:sb&gt;01af5cf8 6630239c System.Web.Caching.CacheSingle.UpdateCache(System.Web.Caching.CacheKey, System.Web.Caching.CacheEntry, Boolean, System.Web.Caching.CacheItemRemovedReason, System.Object ByRef)&lt;BR id=qdnn&gt;01af5dc8 65fa82ea System.Web.Caching.CacheMultiple.UpdateCache(System.Web.Caching.CacheKey, System.Web.Caching.CacheEntry, Boolean, System.Web.Caching.CacheItemRemovedReason, System.Object ByRef)&lt;BR id=rup0&gt;01af5dec 65fa8e2a System.Web.Caching.CacheInternal.DoInsert(Boolean, System.String, System.Object, System.Web.Caching.CacheDependency, System.DateTime, System.TimeSpan, System.Web.Caching.CacheItemPriority, System.Web.Caching.CacheItemRemovedCallback, Boolean)&lt;BR id=avld&gt;01af5e48 6601bc92 System.Web.Caching.Cache.Insert(System.String, System.Object, System.Web.Caching.CacheDependency, System.DateTime, System.TimeSpan, System.Web.Caching.CacheItemPriority, System.Web.Caching.CacheItemRemovedCallback)&lt;BR id=tnf9&gt;01af5e80 01d3bb8d StaticCache.onAreaSubAreaLOVRemove(System.String, System.Object, System.Web.Caching.CacheItemRemovedReason)&lt;BR id=ubqz&gt;01af5ed4 6601e362 System.Web.Caching.CacheEntry.CallCacheItemRemovedCallback(System.Web.Caching.CacheItemRemovedCallback, System.Web.Caching.CacheItemRemovedReason)&lt;BR id=kqy5&gt;01af5f10 6601e60d System.Web.Caching.CacheEntry.Close(System.Web.Caching.CacheItemRemovedReason)&lt;BR id=yvmf&gt;01af5f4c 6630239c System.Web.Caching.CacheSingle.UpdateCache(System.Web.Caching.CacheKey, System.Web.Caching.CacheEntry, Boolean, System.Web.Caching.CacheItemRemovedReason, System.Object ByRef)&lt;BR id=vu34&gt;01af601c 65fa82ea System.Web.Caching.CacheMultiple.UpdateCache(System.Web.Caching.CacheKey, System.Web.Caching.CacheEntry, Boolean, System.Web.Caching.CacheItemRemovedReason, System.Object ByRef)&lt;BR id=nqyp&gt;01af6040 65fa8e2a System.Web.Caching.CacheInternal.DoInsert(Boolean, System.String, System.Object, System.Web.Caching.CacheDependency, System.DateTime, System.TimeSpan, System.Web.Caching.CacheItemPriority, System.Web.Caching.CacheItemRemovedCallback, Boolean)&lt;BR id=o1ad&gt;01af609c 6601bc92 System.Web.Caching.Cache.Insert(System.String, System.Object, System.Web.Caching.CacheDependency, System.DateTime, System.TimeSpan, System.Web.Caching.CacheItemPriority, System.Web.Caching.CacheItemRemovedCallback)&lt;BR id=fb18&gt;01af60d4 01d3bb8d StaticCache.onAreaSubAreaLOVRemove(System.String, System.Object, System.Web.Caching.CacheItemRemovedReason)&lt;BR id=w7qm&gt;01af6128 6601e362 System.Web.Caching.CacheEntry.CallCacheItemRemovedCallback(System.Web.Caching.CacheItemRemovedCallback, System.Web.Caching.CacheItemRemovedReason)&lt;BR id=x3xw&gt;01af6164 6601e60d System.Web.Caching.CacheEntry.Close(System.Web.Caching.CacheItemRemovedReason)&lt;BR id=o63:&gt;01af61a0 6630239c System.Web.Caching.CacheSingle.UpdateCache(System.Web.Caching.CacheKey, System.Web.Caching.CacheEntry, Boolean,&lt;BR id=om.b&gt;01b1f570 65fa8e2a System.Web.Caching.CacheInternal.DoInsert(Boolean, System.String, System.Object, System.Web.Caching.CacheDependency, System.DateTime, System.TimeSpan, System.Web.Caching.CacheItemPriority, System.Web.Caching.CacheItemRemovedCallback, Boolean)&lt;BR id=fdl9&gt;01b1f5cc 6601bc92 System.Web.Caching.Cache.Insert(System.String, System.Object, System.Web.Caching.CacheDependency, System.DateTime, System.TimeSpan, System.Web.Caching.CacheItemPriority, System.Web.Caching.CacheItemRemovedCallback)&lt;BR id=r_jh&gt;01b1f604 01d3bb8d StaticCache.onAreaSubAreaLOVRemove(System.String, System.Object, System.Web.Caching.CacheItemRemovedReason)&lt;BR id=uy_e&gt;01b1f658 6601e362 System.Web.Caching.CacheEntry.CallCacheItemRemovedCallback(System.Web.Caching.CacheItemRemovedCallback, System.Web.Caching.CacheItemRemovedReason)&lt;BR id=etyc&gt;01b1f694 6601e60d System.Web.Caching.CacheEntry.Close(System.Web.Caching.CacheItemRemovedReason)&lt;BR id=j441&gt;01b1f6d0 6630239c System.Web.Caching.CacheSingle.UpdateCache(System.Web.Caching.CacheKey, System.Web.Caching.CacheEntry, Boolean, System.Web.Caching.CacheItemRemovedReason, System.Object ByRef)&lt;BR id=gjmg&gt;01b1f7a0 6601c398 System.Web.Caching.CacheInternal.DoRemove(System.Web.Caching.CacheKey, System.Web.Caching.CacheItemRemovedReason)&lt;BR id=mjce&gt;01b1f7ac 66023ad2 System.Web.Caching.ExpiresBucket.FlushExpiredItems(System.DateTime, Boolean)&lt;BR id=dabm&gt;01b1f820 66023c6f System.Web.Caching.CacheExpires.FlushExpiredItems(Boolean, Boolean)&lt;BR id=f3_e&gt;01b1f868 66023d65 System.Web.Caching.CacheExpires.TimerCallback(System.Object)&lt;BR id=e_b_&gt;01b1f86c 793d9c1a System.Threading._TimerCallback.TimerCallback_Context(System.Object)&lt;BR id=av1n&gt;01b1f870 793683dd System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)&lt;BR id=g1.8&gt;01b1f888 793d9c7f System.Threading._TimerCallback.PerformTimerCallback(System.Object)&lt;BR id=h-7t&gt;01b1fa18 79e88f63 [GCFrame: 01b1fa18]&lt;BR id=b502&gt;01b1fb5c 79e88f63 [ContextTransitionFrame: 01b1fb5c] &lt;/FONT&gt;&lt;/BLOCKQUOTE&gt; &lt;P id=ooso&gt;  &lt;/P&gt; &lt;P id=mhg2&gt; &lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13495362-4419076221599959206?l=artisticcheese.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artisticcheese.blogspot.com/feeds/4419076221599959206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13495362&amp;postID=4419076221599959206' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/4419076221599959206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/4419076221599959206'/><link rel='alternate' type='text/html' href='http://artisticcheese.blogspot.com/2008/04/stackoverflow-exception-analysis-in.html' title=''/><author><name>Гриша</name><uri>http://www.blogger.com/profile/02172772600654399465</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13495362.post-513567881283993706</id><published>2007-01-30T08:40:00.000-06:00</published><updated>2008-04-02T08:41:18.764-05:00</updated><title type='text'></title><content type='html'>&lt;h1&gt;ASP.NET debugging using memory crash analysis &lt;/h1&gt;&lt;p&gt;I was given a task to find out why ASP.NET process was crashing several times an hour on production machines. The only information I had was couple of entries in Event Log. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote style="margin-top:0;margin-bottom:0;"&gt;&lt;p&gt;Event Type: Error&lt;br /&gt;Event Source: ASP.NET 2.0.50727.0&lt;br /&gt;Event Category: None&lt;br /&gt;Event ID: 1000&lt;br /&gt;Date: 10/13/2006&lt;br /&gt;Time: 1:02:32 PM&lt;br /&gt;User: N/A&lt;br /&gt;Computer: DALPRDSIINT6&lt;br /&gt;Description:&lt;br /&gt;aspnet_wp.exe (PID: 16620) stopped unexpectedly.&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Event Type: Error&lt;br /&gt;Event Source: .NET Runtime 2.0 Error Reporting&lt;br /&gt;Event Category: None&lt;br /&gt;Event ID: 5000&lt;br /&gt;Date: 10/13/2006&lt;br /&gt;Time: 1:02:28 PM&lt;br /&gt;User: N/A&lt;br /&gt;Computer: DALPRDSIINT6&lt;br /&gt;Description:&lt;br /&gt;EventType clr20r3, P1 aspnet_wp.exe, P2 2.0.50727.42, P3 4333aece, P4 system.data, P5 2.0.0.0, P6 4333aea2, P7 1946, P8 25, P9 system.invalidoperationexception, P10 NIL. &lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Here is the steps I took based on this &lt;a title="article" href="http://blogs.msdn.com/tess/archive/2006/04/27/584927.aspx" target="blank_"&gt;article&lt;/a&gt; &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Install &lt;a title="Debugging tools for Windows" href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx" target="blank_"&gt;Debugging tools for Windows&lt;/a&gt; &lt;li&gt;Locate you crash dumps in following location&lt;br /&gt;&lt;img src="http://docs.google.com/http://docs.google.com/File?id=ajjjrnfbp28p_28cxcf9k" /&gt; &lt;li&gt;Start Windbg program and modify symbol path to point to Microsoft servers&lt;br /&gt;&lt;img src="http://docs.google.com/http://docs.google.com/File?id=ajjjrnfbp28p_29hp6zt8" /&gt; &lt;li&gt;Open crash dump file&lt;br /&gt;&lt;img src="http://docs.google.com/http://docs.google.com/File?id=ajjjrnfbp28p_30f23s62" /&gt; &lt;li&gt;Results of operation with crash dump are below, stuff in &lt;b&gt;&lt;span style="color:#ff0000;"&gt;red&lt;/span&gt;&lt;/b&gt; are commands and stuff in &lt;span style="color:#3333ff;"&gt;&lt;b&gt;blue&lt;/b&gt;&lt;/span&gt; are relevant pieces &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote style="margin-top:0;margin-bottom:0;"&gt;&lt;p&gt;Extracted C:DOCUME~1A-GREG~1.SUVLOCALS~1Temp1700003cac0_mdmpmem.hdmp from&lt;br /&gt;C:WINNTPCHEALTHERRORREPQSIGNOFFE59B571D.cab &lt;/p&gt;&lt;p&gt;Loading Dump File [C:DOCUME~1A-GREG~1.SUVLOCALS~1Temp1700003cac0_mdmpmem.hdmp]&lt;br /&gt;User Mini Dump File: Only registers, stack and portions of memory are available &lt;/p&gt;&lt;p&gt;Windows 2000 Version 2195 (Service Pack 4) UP Free x86 compatible&lt;br /&gt;Product: Server, suite: TerminalServer SingleUserTS&lt;br /&gt;Debug session time: Wed Sep 27 15:46:57.000 2006 (GMT-5)&lt;br /&gt;System Uptime: not available&lt;br /&gt;Process Uptime: 0 days 0:03:06.000&lt;br /&gt;Symbol search path is: srv*c:symbols*http://msdl.microsoft.com/download/symbols&lt;br /&gt;Executable search path is:&lt;br /&gt;..................................................................................................&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;sos.dll needs a full memory dump for complete functionality.&lt;br /&gt;You can create one with .dump /ma &amp;lt;filename&amp;gt;&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;This dump file has an exception of interest stored in it.&lt;br /&gt;The stored exception information can be accessed via .ecxr.&lt;br /&gt;(1d84.3eec): CLR exception - code e0434f4d (first/second chance not available)&lt;br /&gt;eax=06030000 ebx=02dee60c ecx=00001000 edx=00000000 esi=77f88f08 edi=000007ac&lt;br /&gt;eip=77f88f13 esp=02dee5f0 ebp=02dee614 iopl=0 nv up ei ng nz ac pe cy&lt;br /&gt;cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000297&lt;br /&gt;NTDLL!ZwWaitForSingleObject+0xb:&lt;br /&gt;77f88f13 c20c00 ret 0Ch &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;u&gt;Dumping list of threads including thread where exception occurred (in our case thread no 6)&lt;br /&gt;&lt;/u&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;&lt;b&gt;0:006&amp;gt; !threads&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;ThreadCount: 9&lt;br /&gt;UnstartedThread: 0&lt;br /&gt;BackgroundThread: 9&lt;br /&gt;PendingThread: 0&lt;br /&gt;DeadThread: 0&lt;br /&gt;Hosted Runtime: no&lt;br /&gt;&lt;span style="font-family:Fixedsys;"&gt;PreEmptive GC Alloc Lock&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Fixedsys;"&gt;ID OSID ThreadOBJ State GC Context Domain Count APT Exception&lt;br /&gt;1 1 3ad8 00164c48 8808220 Enabled 00000000:00000000 0015c550 0 Ukn (Threadpool Completion Port)&lt;br /&gt;6 2 3eec 00170710 b220 Enabled 00000000:00000000 05227d48 1 MTA (Finalizer) System.InvalidOperationException (&lt;span style="color:#3333ff;"&gt;&lt;b&gt;01003f2c&lt;/b&gt;&lt;/span&gt;)&lt;br /&gt;7 3 3294 001866e8 80a220 Enabled 00000000:00000000 0015c550 0 MTA (Threadpool Completion Port)&lt;br /&gt;10 4 3d48 00198c68 1220 Enabled 00000000:00000000 0015c550 0 Ukn&lt;br /&gt;11 5 246c 001e27d8 880b220 Enabled 00000000:00000000 0015c550 0 MTA (Threadpool Completion Port)&lt;br /&gt;13 6 37c 00200c08 180b220 Enabled 00000000:00000000 0015c550 0 MTA (Threadpool Worker)&lt;br /&gt;9 8 8fc 0023a8e0 220 Enabled 00000000:00000000 0015c550 0 STA&lt;br /&gt;15 9 7dc 002330b8 200b220 Enabled 00000000:00000000 002124c0 1 MTA&lt;br /&gt;16 7 ae0 00233478 880b220 Enabled 00000000:00000000 0015c550 0 MTA (Threadpool Completion Port)&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;u&gt;Find information about exception based on address above&lt;/u&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;&lt;b&gt;0:006&amp;gt; !printexception 01003f2c&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Fixedsys;"&gt;Exception object: 01003f2c&lt;br /&gt;Exception type: System.InvalidOperationException&lt;br /&gt;Message: Internal .Net Framework Data Provider error 1.&lt;br /&gt;InnerException: &amp;lt;none&amp;gt;&lt;br /&gt;StackTrace (generated):&lt;br /&gt;SP IP Function&lt;br /&gt;02DEF8D4 653976BF System.Data.ProviderBase.DbConnectionInternal.PrePush(System.Object)&lt;br /&gt;02DEF8E0 652B29CD System.Data.ProviderBase.DbConnectionPool.PutObject(System.Data.ProviderBase.DbConnectionInternal, System.Object)&lt;br /&gt;02DEF920 65277FC6 System.Data.ProviderBase.DbConnectionInternal.CloseConnection(System.Data.Common.DbConnection, System.Data.ProviderBase.DbConnectionFactory)&lt;br /&gt;02DEF950 652CD4BA System.Data.SqlClient.SqlConnection.Close()&lt;br /&gt;02DEF988 &lt;b&gt;&lt;span style="color:#3333ff;"&gt;05E5299E&lt;/span&gt;&lt;/b&gt; RNTransactionLogWS.RNTransactionLog.Finalize()&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Fixedsys;"&gt;StackTraceString: &amp;lt;none&amp;gt;&lt;br /&gt;HResult: 80131509&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;u&gt;Our InvalidOperationException happened in Finalize() method of RNTransacationLog. We need to dump contents of that assembly, first we using IP to MD command to find method descriptor&lt;/u&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;&lt;b&gt;0:006&amp;gt; !ip2md 0x05E5299E&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Fixedsys;"&gt;MethodDesc: 05c78bb8&lt;br /&gt;Method Name: RNTransactionLogWS.RNTransactionLog.Finalize()&lt;br /&gt;Class: 05e3544c&lt;br /&gt;MethodTable: &lt;span style="color:#3333ff;"&gt;&lt;b&gt;05c78c5c&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;mdToken: 06000035&lt;br /&gt;Module: 05c75534&lt;br /&gt;IsJitted: yes&lt;br /&gt;m_CodeOrIL: 05e52960&lt;/span&gt; &lt;/p&gt;&lt;span style="font-family:Fixedsys;"&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;u&gt;Dump method table to find which DLL code compiled to&lt;/u&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;&lt;b&gt;0:006&amp;gt; !dumpmt 05c78c5c&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:Fixedsys;"&gt;EEClass: 05e3544c&lt;br /&gt;Module: 05c75534&lt;br /&gt;Name: RNTransactionLogWS.RNTransactionLog&lt;br /&gt;mdToken: 02000008 (C:WINNTMicrosoft.NETFrameworkv2.0.50727Temporary ASP.NET Filesiis_rnlogging8f383ed1f56b55d8assemblydl36231f022a01f4daa_e7a8c501&lt;span style="color:#3333ff;"&gt;&lt;b&gt;RNTransactionLogWS&lt;/b&gt;&lt;/span&gt;.DLL)&lt;br /&gt;BaseSize: 0x18&lt;br /&gt;ComponentSize: 0x0&lt;br /&gt;Number of IFaces in IFaceMap: 0&lt;br /&gt;Slots in VTable: 23&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Find loading address by using command lmv&amp;lt;assemblyname&amp;gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;&lt;b&gt;0:006&amp;gt; lmv mRNTransactionLogWS&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Fixedsys;"&gt;start end module name&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;b&gt;05e40000&lt;/b&gt;&lt;/span&gt; 05e50000 RNTransactionLogWS (deferred)&lt;br /&gt;Image path: C:WINNTMicrosoft.NETFrameworkv2.0.50727Temporary ASP.NET Filesiis_rnlogging8f383ed1f56b55d8assemblydl36231f022a01f4daa_e7a8c501RNTransactionLogWS.DLL&lt;br /&gt;Image name: RNTransactionLogWS.DLL&lt;br /&gt;Has CLR image header, track-debug-data flag not set&lt;br /&gt;Timestamp: Mon Dec 05 12:24:57 2005 (439485F9)&lt;br /&gt;CheckSum: 00000000&lt;br /&gt;ImageSize: 00010000&lt;br /&gt;File version: 1.0.2165.22349&lt;br /&gt;Product version: 1.0.2165.22349&lt;br /&gt;File flags: 0 (Mask 3F)&lt;br /&gt;File OS: 4 Unknown Win32&lt;br /&gt;File type: 2.0 Dll&lt;br /&gt;File date: 00000000.00000000&lt;br /&gt;Translations: 0000.04b0&lt;br /&gt;CompanyName:&lt;br /&gt;ProductName:&lt;br /&gt;InternalName: RNTransactionLogWS.dll&lt;br /&gt;OriginalFilename: RNTransactionLogWS.dll&lt;br /&gt;&amp;amp;nbsp; ProductVersion: 1.0.2165.22349&lt;br /&gt;FileVersion: 1.0.2165.22349&lt;br /&gt;FileDescription:&lt;br /&gt;LegalCopyright:&lt;br /&gt;LegalTrademarks:&lt;br /&gt;Comments:&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;u&gt;Now we can extract assembly from memory dump&lt;/u&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;&lt;b&gt;0:006&amp;gt; !savemodule 05e40000 c:a.dll&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:Fixedsys;"&gt;3 sections in file&lt;br /&gt;section 0 - VA=2000, VASize=8af4, FileAddr=1000, FileSize=9000&lt;br /&gt;section 1 - VA=c000, VASize=390, FileAddr=a000, FileSize=1000&lt;br /&gt;section 2 - VA=e000, VASize=c, FileAddr=b000, FileSize=1000&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;The last is finding offending code in assembly. Ildasm.exe can be used or Lutz Roeder's reflector from &lt;a href="http://www.aisto.com/roeder/dotnet/"&gt;http://www.aisto.com/roeder/dotnet/&lt;/a&gt;. Output of reflector shown below highlighting offending method where exception happened (Finalize()) &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://docs.google.com/http://docs.google.com/File?id=ajjjrnfbp28p_31dgtmrp" /&gt; &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;We can see that developer tried to close Connection object within Finalize() method which is explicitly stated in &lt;a title="MSDN" href="http://msdn2.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.close.aspx"&gt;MSDN&lt;/a&gt; as prohibited. Here is part of documentation &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;table cellspacing="0" cellpadding="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th align="left"&gt;&lt;img class="note" alt="Caution note" src="http://msdn2.microsoft.com/en-us/library/w3dswsb6.Caution(en-US,VS.80).gif" /&gt;Caution &lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;Do not call &lt;b&gt;Close&lt;/b&gt; or &lt;b&gt;Dispose&lt;/b&gt; on a Connection, a DataReader, or any other managed object in the &lt;b&gt;Finalize&lt;/b&gt; method of your class. In a finalizer, you should only release unmanaged resources that your class owns directly. If your class does not own any unmanaged resources, do not include a &lt;b&gt;Finalize&lt;/b&gt; method in your class definition. For more information, see &lt;span class="linkTerms"&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/0xy59wtx.aspx"&gt;Garbage Collection&lt;/a&gt;&lt;/span&gt;. &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Bingo! We know how, when and why application was crashing. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13495362-513567881283993706?l=artisticcheese.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://artisticcheese.blogspot.com/feeds/513567881283993706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13495362&amp;postID=513567881283993706' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/513567881283993706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13495362/posts/default/513567881283993706'/><link rel='alternate' type='text/html' href='http://artisticcheese.blogspot.com/2008/04/asp.html' title=''/><author><name>Гриша</name><uri>http://www.blogger.com/profile/02172772600654399465</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
