<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>SpankyJ</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/joshwil/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/joshwil/feed.xml</link>
    <description>Adventures in the guts of Oslo... M, Mg and other language fun...</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:23:36 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>MrEpl a fun way to learn MSchema</title>
      <link>https://docs.microsoft.com/archive/blogs/joshwil/mrepl-a-fun-way-to-learn-mschema</link>
      <pubDate>Thu, 13 Nov 2008 01:34:40 GMT</pubDate>
      <dc:creator><![CDATA[joshwil]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/joshwil/2008/11/13/mrepl-a-fun-way-to-learn-mschema/</guid>
      <description><![CDATA[One of the hidden gems (in my mind, but then I’m biased) in the Microsoft “Oslo” SDK that went...]]></description>
      <content:encoded><![CDATA[<p>One of the hidden gems (in my mind, but then I’m biased) in the Microsoft “Oslo” SDK that went public at PDC is the “M Script Mode” in Intellipad which we affectionately know as MrEpl.</p>  <p>MrEpl is a REPL processor for the MSchema language and is a great way to play around with M and learn about it. </p>  <p>I have recorded a screen cast of some adventuring through MrEpl and it is posted on the Oslo dev center here: <a title="http://wm.microsoft.com/ms/msdn/oslo/MrEplWalkthrough.wmv" href="http://wm.microsoft.com/ms/msdn/oslo/MrEplWalkthrough.wmv">http://wm.microsoft.com/ms/msdn/oslo/MrEplWalkthrough.wmv</a></p>  <p>&#160;</p>  <p>For those who just want to play, make sure you have the Oslo SDK installed, then run “Intellipad (With Samples)”. </p>  <blockquote>   <p>- Once in Intellipad type “Ctrl-/” to get to the minibuffer. </p>    <p>- There type &quot;SetMode(‘MScriptMode’)”</p> </blockquote>  <p>You’re now in MrEpl. Feel free to type an M expression: 1 + 1</p>  <p>&#160;</p>  <p>Have Fun!</p>]]></content:encoded>
    </item>
    <item>
      <title>Using MGrammar to create .Net instances through Xaml</title>
      <link>https://docs.microsoft.com/archive/blogs/joshwil/using-mgrammar-to-create-net-instances-through-xaml</link>
      <pubDate>Thu, 13 Nov 2008 01:30:14 GMT</pubDate>
      <dc:creator><![CDATA[joshwil]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/joshwil/2008/11/13/using-mgrammar-to-create-net-instances-through-xaml/</guid>
      <description><![CDATA[In the last couple months I have had more fun playing with MGrammar than just about any other...]]></description>
      <content:encoded><![CDATA[<p>In the last couple months I have had more fun playing with MGrammar than just about any other programming I’ve ever done, but in its current form the one thing that really feels missing to me is an easy ability to create CLR object instances.</p>  <p>MGrammar is great for tying in with MSchema, and you can write custom IGraphBuilder implementations for all kinds of things, but in the end most of the code I am writing is still C# and needs instances as input.</p>  <p>Enter Xaml, a wonderful format for writing down arbitrary .Net objects (well many of them anyway). And, it turns out that the MGraph data rep is reasonably friendly to a Xaml projection. So, now posted as a sample on the Oslo dev center is some code I wrote to enable targeting Xaml with MGrammar output.</p>  <p>&#160;</p>  <p>Get the bits here: [updated link on 11/28, apparently the bits moved]<a title="http://download.microsoft.com/download/B/9/8/B982BFD9-3E17-426A-A537-833BEF376698/MGrammarXamlSample.msi" href="http://download.microsoft.com/download/B/9/8/B982BFD9-3E17-426A-A537-833BEF376698/MGrammarXamlSample.msi">http://download.microsoft.com/download/B/9/8/B982BFD9-3E17-426A-A537-833BEF376698/MGrammarXamlSample.msi</a></p>  <p>&#160;</p>  <p>And after that go watch a couple of screen casts that I recorded about using the sample.</p>  <p>&#160;</p>  <p>First: a very simple example of instantiating a Person object from MGrammar output: <a title="http://wm.microsoft.com/ms/msdn/oslo/PersonExample.wmv" href="http://wm.microsoft.com/ms/msdn/oslo/PersonExample.wmv">http://wm.microsoft.com/ms/msdn/oslo/PersonExample.wmv</a></p>  <p>&#160;</p>  <p>This example takes a simple grammar and some input, creates a graph and then runs it through the MGraphXamlReader to create instances of the type Person (see below) which I defined in C#.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/joshwil/WindowsLiveWriter/UsingMGrammartoc.NetinstancesthroughXaml_13C70/image_2.png" original-url="http://blogs.msdn.com/blogfiles/joshwil/WindowsLiveWriter/UsingMGrammartoc.NetinstancesthroughXaml_13C70/image_2.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="317" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/joshwil/WindowsLiveWriter/UsingMGrammartoc.NetinstancesthroughXaml_13C70/image_thumb.png" original-url="http://blogs.msdn.com/blogfiles/joshwil/WindowsLiveWriter/UsingMGrammartoc.NetinstancesthroughXaml_13C70/image_thumb.png" width="454" border="0" /></a> </p>  <blockquote>   <p>public class Person      <br />{       <br />&#160;&#160;&#160; List&lt;Person&gt; children = new List&lt;Person&gt;(); </p> </blockquote>  <blockquote>   <p>&#160;&#160;&#160; public string First { get; set; }      <br />&#160;&#160;&#160; public string Last { get; set; }       <br />&#160;&#160;&#160; public ICollection&lt;Person&gt; Children { get { return children; } } </p>    <p>}</p> </blockquote>  <p>&#160;</p>  <p>&#160;</p>  <p>A more complex example of a grammar for writing down WPF applications in an English like syntax:</p>  <p><a title="http://wm.microsoft.com/ms/msdn/oslo/mwindowexample.wmv" href="http://wm.microsoft.com/ms/msdn/oslo/mwindowexample.wmv">http://wm.microsoft.com/ms/msdn/oslo/mwindowexample.wmv</a></p>]]></content:encoded>
    </item>
    <item>
      <title>What have I been up to?</title>
      <link>https://docs.microsoft.com/archive/blogs/joshwil/what-have-i-been-up-to</link>
      <pubDate>Sun, 02 Nov 2008 13:17:58 GMT</pubDate>
      <dc:creator><![CDATA[joshwil]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/joshwil/2008/11/02/what-have-i-been-up-to/</guid>
      <description><![CDATA[My blog has been a little quiet in the last year or two after I left the CLR and went to work for...]]></description>
      <content:encoded><![CDATA[<p>My blog has been a little quiet in the last year or two after I left the CLR and went to work for Doug Purdy’s (<a href="http://www.douglasp.com">http://www.douglasp.com</a>) team in the Connected Systems Division. Since then I’ve been having amazing amounts of fun and working on lots of fun stuff ranging from duck typing, serialization/deserialization stacks, change notification systems and most recently language/compilers with the new language that Microsoft is unleashing on the world called M (<a href="http://blogs.msdn.com/mlanguage">http://blogs.msdn.com/mlanguage</a>).</p>  <p>You can check out a bunch of interesting content about the Oslo product on MSDN at <a href="http://msdn.microsoft.com/oslo">http://msdn.microsoft.com/oslo</a>. Or, just hang around here as I’m sure to post entries now that things are public about my adventures in this new family of languages and their uses.</p>]]></content:encoded>
    </item>
    <item>
      <title>Haven't posted in a while... New challenges... New peers?</title>
      <link>https://docs.microsoft.com/archive/blogs/joshwil/havent-posted-in-a-while-new-challenges-new-peers</link>
      <pubDate>Mon, 19 Nov 2007 01:21:00 GMT</pubDate>
      <dc:creator><![CDATA[joshwil]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/joshwil/2007/11/19/havent-posted-in-a-while-new-challenges-new-peers/</guid>
      <description><![CDATA[So, I haven't posted in quite a while, I need to get on that... In the meantime I've moved on from...]]></description>
      <content:encoded><![CDATA[<P>So, I haven't posted in quite a while, I need to get on that... In the meantime I've moved on from the CLR team after about 5 years of fun times and am now having fun exploring some new stuff that unfortunately I can't talk about... However, the peers are awesome, and, now we're looking for more awesome people:</P>
<P><A href="http://www.douglasp.com/blog/2007/11/15/MyTeamIsHiring.aspx">http://www.douglasp.com/blog/2007/11/15/MyTeamIsHiring.aspx</A></P>
<P>Interested in kick ass technology with crazy smart people? Email Doug (<A href="mailto:douglasp@microsoft.com">douglasp@microsoft.com</A>).</P>]]></content:encoded>
    </item>
    <item>
      <title>Patrick is blogging, make sure to check it out!</title>
      <link>https://docs.microsoft.com/archive/blogs/joshwil/patrick-is-blogging-make-sure-to-check-it-out</link>
      <pubDate>Wed, 22 Nov 2006 16:10:00 GMT</pubDate>
      <dc:creator><![CDATA[joshwil]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/joshwil/2006/11/22/patrick-is-blogging-make-sure-to-check-it-out/</guid>
      <description><![CDATA[http://blogs.msdn.com/patrick_dussud/default.aspx
Patrick is super-smart... Hopefullly his blog...]]></description>
      <content:encoded><![CDATA[<P><A href="http://blogs.msdn.com/patrick_dussud/default.aspx">http://blogs.msdn.com/patrick_dussud/default.aspx</A></P>
<P>Patrick is super-smart... Hopefullly his blog will pick up where Chris Brumme's left off a couple years back.</P>
<P>&nbsp;-josh</P>]]></content:encoded>
    </item>
    <item>
      <title>PerfConsole is my kind of 20% time...</title>
      <link>https://docs.microsoft.com/archive/blogs/joshwil/perfconsole-is-my-kind-of-20-time</link>
      <pubDate>Thu, 10 Aug 2006 13:44:35 GMT</pubDate>
      <dc:creator><![CDATA[joshwil]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/joshwil/2006/08/10/perfconsole-is-my-kind-of-20-time/</guid>
      <description><![CDATA[Other companies&nbsp;have&nbsp;much talked about 20% time... That sounds great to me! Here at...]]></description>
      <content:encoded><![CDATA[<p>Other <a href="http://www.google.com">companies</a>&nbsp;have&nbsp;much talked about 20% time... That sounds great to me! Here at Microsoft (at least in my group) we do too, kinda. I find that every one of my peers has some interesting project that they're working on outside of their normal work activities, some of the categories for people&nbsp;I know of on the CLR&nbsp;are:</p>  <blockquote>   <p>- pet projects related to the product (in this case CLR) which they are prototyping in the hope of getting some traction in the problem space</p>    <p>- pet projects related to the engineering effort around the product (e.g. static analysis, etc...)</p>    <p>- tools related to software engineering in general (much of my stuff falls into this category)</p>    <p>- random stuff using managed code just to use manage code (eating your own dog food is good right? especially when it tastes this good)</p> </blockquote>  <p>Many of the tools that we use to build and test the CLR started this way, two public examples being <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=5A04EE30-6259-4FAD-BF05-CCB72BE09B4A&amp;displaylang=en">PerfConsole</a> and <a href="http://www.microsoft.com/downloads/details.aspx?familyid=38449a42-6b7a-4e28-80ce-c55645ab1310&amp;displaylang=en">MDBG</a>. Both of these were started as pet projects and have become an integral part of CLR processes (admittedly MDBG&nbsp;significantly more so than&nbsp;PerfConsole at the moment, MDBG being the CLR's primary managed debugging test harness).</p>  <p>&nbsp;</p>  <p>Anecdotally I believe that there are lots of people inside Microsoft doing this as well, internally we have a system for sharing tools you've written that help you get things done and last time I checked it had 4500+ tools on it, and that's just the stuff that people bother to publish.</p>  <p>&nbsp;</p>  <p> I strongly believe that pet projects should be encouraged within any software development team. I'm glad that my experience with Microsoft has been that they do encourage experimentation, after all where do you think the CLR came from?</p>]]></content:encoded>
    </item>
    <item>
      <title>PerfConsole is unleashed...</title>
      <link>https://docs.microsoft.com/archive/blogs/joshwil/perfconsole-is-unleashed</link>
      <pubDate>Fri, 04 Aug 2006 11:01:19 GMT</pubDate>
      <dc:creator><![CDATA[joshwil]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/joshwil/2006/08/04/perfconsole-is-unleashed/</guid>
      <description><![CDATA[So, Rico beat me to the punch: http://blogs.msdn.com/ricom/archive/2006/08/03/688019.aspx  &nbsp;...]]></description>
      <content:encoded><![CDATA[<p>So, Rico beat me to the punch: <a href="http://blogs.msdn.com/ricom/archive/2006/08/03/688019.aspx">http://blogs.msdn.com/ricom/archive/2006/08/03/688019.aspx</a></p>  <p>&nbsp;</p>  <p>As we have seen in the previous entry it is nice that the VSTS Profiler team has provided a tool which converts their .VSP files into something which is more easily readable by other programs. While I was working on CLR oerformance last year I spent a lot of time playing with the output of the VSTS Profiler before the UI pieces were ready, so I spent a lot of time using the data in the .CSV files to diagnose problems. After just a short amount of time doing this by hand I decided to go ahead and automate the process, I created a number of utilities to parse the output CSV files and find some interesting information. In that first rev you basically ha d to run the application anytime you wanted to change the inputs to the query (different string, different cutoffs for various things, etc.). It didn't take too long to realize that this wasn't going to scale, and <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=5A04EE30-6259-4FAD-BF05-CCB72BE09B4A&amp;displaylang=en">PerfConsole</a> was born...</p>  <p><img height="480" src="http://homepage.mac.com/willij3/PerfConsole/1.png" width="592" border="0"></p>  <p>What we can see above are some of the basics of PerfConsole's command syntax; overall it strives to mix some of the console module that cmd.exe or Windows PowerShell has with what is more or less a domain specifica language for interpreting profile data. There are a number of commands which are included in the base package which include the following which we can see above:</p>  <blockquote>   <p>- load: loads a profile from disk, commonly you specify a .VSP file and PerfConsole will look for the (required) associated .CSV files which were generated either from the "export" function in VS or using the command line as outlined <a href="http://blogs.msdn.com/joshwil/archive/2006/08/03/687783.aspx">here</a>.</p>    <p>- functions: takes a profile as input and returns the piece that corresponds to a list of functions which were seen in the profile with Inclusive and Exclusive times.</p>    <p>- modules: takes a profile as input and returns the piece that contains a list of modules which were seen in the profile with Inclusive and Exclusive times.</p>    <p>- sort: takes in a list and returns a sorted list ordered by some property (in this case "ex" is shorthand for "ExclusivePercentage")</p>    <p>- top: takes in a list and returns a subset of that list including X elements starting at element 0</p> </blockquote>  <p>Through the example above we can start to see the basic syntax of using PerfConsole: you use&nbsp;the '|' to connect statements where each statement (reading left to right) has input from the return value of the previous statement and the parameters specified. Like Windows PowerShell when things are passed from left to right they are full fledged .Net objects, and PerfConsole can use those objects to do some type checking as you go in order to tell you if you're combining commands in unsupported ways.</p>  <blockquote>   <p><em>Incidentally I initially tried really hard to reverse the execution order and instead execute from right to left, it made for statements that read like a sentance "top 5 | sort ex | functions @board_ngen" == "get me the top 5 exclusive functions in&nbsp;@board_ngen"; however the people internally revolted and said that if that is what I wanted I couldn't overload '|' to do it.</em></p> </blockquote>  <p>As a side effect (or design point) of the way that PerfConsole passes objects between statements I have been able to implement a very powerful help system, for instance at any point you're able to pipe the result of any statement or set of statements to '?' and it will tell you the resulting data type and which commands will accept that type as a input (in a strongly typed manner). For instance:</p>  <blockquote>   <p><strong>&gt;</strong> <strong>functions @board_ngen | ?        <br /></strong>Data type is: PerfConsole.Data.FunctionSummaryData       <br /></p>    <p>This data type can be input to the following commands:      <br /></p>    <p>bottom      <br />count       <br />find       <br />getitem       <br />getproperty       <br />sort       <br />top       <br />trim       <br />timebytype       <br />partition</p> </blockquote>  <p>Here we see that the functions command returns a FunctionSummaryData object which can be input to a number of other commands, including the top and sort commands. Here we also see that functions has this&nbsp;wierd "@board_ngen" parameter, in PerfConsole @ denotes a temporary (you can create these using the save command), and the temporary named "board_ngen" is the profile that I've imported for this demo.</p>  <p>Help also works well with commands. For instance:</p>  <blockquote>   <p><strong>&gt;</strong> <strong>? sort</strong>       <br />Sort a ISortable (e.g. FunctionSummary, ModuleSummary). Each type has its own       <br />sort types (e.g. 'name', 'address', 'exclusive', etc...).       <br /></p>    <p>Usage:      <br />ISortable | sort &lt;field:SortField&gt; | ISortable       <br />ISortable | sort &lt;field:SortField&gt; &lt;direction:SortDirection&gt; | ISortable       <br /></p>    <p>Have enum paramters:      <br />SortDirection { Ascending, Descending }       <br />SortField { Name, ExclusivePercentage, InclusivePercentage, Address }</p> </blockquote>  <p>Here we can see that we are able to see that the sort command takes as input something which implements ISortable (which by inference from the previous help output we believe that FunctionSummaryData does), it also can take up to two parameters which are values of the enum SortField and SortDirection (these are allowed to be shortened arbitrarially so long as they remain disabiguated from their peers). As a return value sort specifies that it returns an ISortable, if we pipe the return value from sort to the help we see:</p>  <blockquote>   <p><strong>&gt; functions @board_ngen | sort ex | ?</strong>       <br />Data type is: PerfConsole.Data.FunctionSummaryData</p> </blockquote>  <p>This indicates that sort actually returns a FunctionSummaryData (which implements ISortable), behind the scenes the sort command clones the original FunctionSummaryData and returns the modified copy.</p>  <p>&nbsp;</p>  <p>Note that for simplicity's sake I've used PerfConsole with the /console command line option which causes results to show in the console, the default is to show results as HTML which you can click around to do more queries and such, in fact, before I end this blog entry which has already managed to get too long I'll show you <a href="http://blogs.msdn.com/ricom/">Rico's</a> favorite command:</p>  <blockquote>   <p><strong>&gt; calltree @board_ngen | trim in &gt; 5 | compacttree</strong></p> </blockquote>  <p><img src="http://homepage.mac.com/willij3/PerfConsole/2.png" width="737" border="0" heigh="789"></p>  <p>&nbsp;</p>  <p>Anyway, that's a primer on using PerfConsole, please download it <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=5A04EE30-6259-4FAD-BF05-CCB72BE09B4A&amp;displaylang=en">here</a>. When you start it up, the <strong>??</strong> command will open a longer document which should hopefully get you started quickly.</p>]]></content:encoded>
    </item>
    <item>
      <title>Performance Analysis</title>
      <link>https://docs.microsoft.com/archive/blogs/joshwil/performance-analysis</link>
      <pubDate>Thu, 03 Aug 2006 14:15:09 GMT</pubDate>
      <dc:creator><![CDATA[joshwil]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/joshwil/2006/08/03/performance-analysis/</guid>
      <description><![CDATA[I have spent the last couple years investigating the performance of various parts of the CLR and...]]></description>
      <content:encoded><![CDATA[<p>I have spent the last couple years investigating the performance of various parts of the CLR and managed code, in that time I have learned that a profiler is an invaluable tool. There are quite a few profilers available including: CLR Profiler, Intel's VTune, AMD's CodeAnalyst, Microsoft's VSTS Profiler, Kernrate and various profilers which Microsoft has developed internally (including the predecessors to VSTS Profiler) as well as many others which I don't list here only because I don't have experience with them. While every profiler has strengths and weaknesses, lately I've been finding that I turn to the VSTS Profiler more often than not for my first analysis.</p>  <p>If you have VSTS and want to learn more about the profiler see the team's blog: <a href="http://blogs.msdn.com/profiler/">http://blogs.msdn.com/profiler/</a></p>  <p>VSTS Profiler has many options and through those can get at a lot of data about your application, however I usually find that some of the most interesting can be obtained with simple vanilla sample based profiling. You can do this through the VS interface, or from the command line using the VSTS Profiler command line utilities, basically the steps are as follows:</p>  <blockquote>   <p>1)&nbsp;<em>Only if profiling managed code</em>: vsPerfClrEnv.cmd /sampleOn&nbsp;</p>    <p>2) vsPerfCmd.exe /start:sample /output:&lt;name&gt;.VSP</p>    <p>3) vsPerfCmd.exe /launch:&lt;application&gt;.exe</p>    <p>&nbsp;&nbsp;&nbsp; <em>&lt;&lt;wait for application to close&gt;&gt;</em></p>    <p>4) vsPerfCmd.exe /shutdown</p> </blockquote>  <p>By following those 4 steps you can profile an application, the result is a .VSP file named &lt;name&gt;.VSP. This contains all the profile data collected during the run. This file is readable directly by VSTS. There are however interesting analysis to do on the data that the VSTS 2005 interface doesn't have support for, to address this issue the VSTS Profiler team has included a utility called vsPerfReport.exe which can translate a .VSP file into a set of comma seperated value (CSV) files, one for each of the major views seen in VSTS. In order to do this you execute:</p>  <blockquote>   <p>5) vsPerfReport.exe /summary:all &lt;name&gt;.VSP</p> </blockquote>  <p>at the end of all this you will have a set of files named &lt;name&gt;_&lt;type&gt;.CSV which are views into the data in the VSP, you can open these in Notepad to view the text or import them into Excel to see the columns more clearly called out.</p>  <p>Once the data is in this form we can do whatever we like with it, for instance sorting by a particular column in Excel or searching for a particular row using a string in Notepad. However, wouldn't it be interesting to be able to do more? </p>  <p> Stay tuned...</p>]]></content:encoded>
    </item>
    <item>
      <title>Visual Studio Team System 180 day trial...</title>
      <link>https://docs.microsoft.com/archive/blogs/joshwil/visual-studio-team-system-180-day-trial</link>
      <pubDate>Tue, 01 Aug 2006 11:46:09 GMT</pubDate>
      <dc:creator><![CDATA[joshwil]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/joshwil/2006/08/01/visual-studio-team-system-180-day-trial/</guid>
      <description><![CDATA[I just found out that VSTS has a free 180-day trial edition....]]></description>
      <content:encoded><![CDATA[<p>I just found out that VSTS has a free 180-day trial edition.</p>  <p><a href="http://msdn.microsoft.com/vstudio/products/trial/">http://msdn.microsoft.com/vstudio/products/trial/</a></p>  <p>This is AWESOME because VSTS has a great profiler included in the package!</p>]]></content:encoded>
    </item>
    <item>
      <title>Should I choose to take advantage of 64-bit?</title>
      <link>https://docs.microsoft.com/archive/blogs/joshwil/should-i-choose-to-take-advantage-of-64-bit</link>
      <pubDate>Tue, 18 Jul 2006 16:08:35 GMT</pubDate>
      <dc:creator><![CDATA[joshwil]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/joshwil/2006/07/18/should-i-choose-to-take-advantage-of-64-bit/</guid>
      <description><![CDATA[Here's the guts of a response that I posted a while back to an internal mailing list re: tradeoffs...]]></description>
      <content:encoded><![CDATA[<p>Here's the guts of a response that I posted a while back to an internal mailing list re: tradeoffs of runing your managed code as 64-bit vs 32-bit. YMMV, and I'll remind you that every perf question has a thousand answers depending on the situation.</p>  <p>&nbsp;</p>  <p>&gt;&gt;&gt;&gt;&gt;&gt;&gt; snip &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;</p>  <p></p>  <div>   <p>&nbsp;</p>    <p>Here's my own personal list of the big pluses and minuses of moving to 64-bit code...</p>    <p>&nbsp;</p>    <p><u>Pluses</u>:</p>    <blockquote>     <p>- more memory (+++++)</p>   </blockquote>    <blockquote>     <p>- better 64-bit math (+++)</p>   </blockquote>    <blockquote>     <p>- X64 OS kernel takes advantage of more memory to do good things for a lot of stuff (+++)</p>   </blockquote>    <p><u>Minuses</u>:</p>    <blockquote>     <p>- things <strong>need</strong> more memory (pointers are bigger, and especially in managed code references are everything and are everywhere) (--)</p>   </blockquote>    <blockquote>     <p>- the processor's cache is effectively smaller (when comparing against the same machine in 32-bit vs 64-bit mode) because of the prior point (----)</p>   </blockquote>    <blockquote>     <p>- code also tends to be bigger because of extra prefix bytes and instructions that carry around 8-byte immediate values instead of 4 byte immediate values</p>   </blockquote>    <p>&nbsp;</p>    <p>What this tends to mean is that code that runs extremely well on 32-bit, doesn't have any 64-bit math (or otherwise take advantage of improvements in the 64-bit processor) and runs well in &lt; 2GB of memory without having to bother hitting the disk for anything will likely continue to run on 64-bit with somewhat MORE memory usage and a little bit slower because the processors cache is effectively smaller when compared to the bloated size of the things that need to be in it. </p>    <p>In the scenario described above you get the minuses of the platform without taking advantage of the pluses.</p>    <p>If however you have an application or set of applications that can take advantage of the pluses to offset the minuses they can come out in the black (sometimes _very_ much so). We have seen a number of large applications which used to be memory starved on 32-bit and had some type of home-grown paging able to throw that more or less out the window and see their performance go up by 2, 3 or even 4X. PaintDotNet (which is a pretty cool photo editing application, Rick Brewster's blog: <a href="http://blogs.msdn.com/rickbrew/default.aspx">http://blogs.msdn.com/rickbrew/default.aspx</a>) rewrote a bunch of their filters to take advantage of 64-bit math and saw speed boosts moving to x64 of 3X+ for those filters. I just saw a presentation the other day where microsoft.com was saying that they have seen both significant reliability boosts and throughput increases moving to 64-bit (however they were running 12 app pools on a box and were definitely running into the memory limits of the 32-bit system).</p> </div>]]></content:encoded>
    </item>
  </channel>
</rss>