title: metrics needed - maximum memory allocation by Windows-Server-2012 for a .NET-program
body: <p>I have a unique situation in relation to memory consumed by our product (built in .NET-Web) versus hardware-RAM.</p>
  
  <p>The customer for whom the product is being deployed is having following configuration on PRODUCTION environment.</p>
  
  <p>Hardware:</p>
  
  <ul>
  <li>[a] DUAL XEON X5570 2.93GHZ QUAD CORE CPU'S WITH 3.33GHZ TURBO,
  6.4GT/s QPI AND 8MB CACHE [b] 144GB RAM - MEMORY [c] 8x 600GB 10K 2.5" SAS HDD [d] SMART ARRAY P410i RAID CONTROLLER WITH BATTERY AND 256MB CACHE [e] 4x GIGABIT ETHERNET [f] DUAL 460W POWER SUPPLIES</li>
  </ul>
  
  <p>Software (all in ONE box):</p>
  
  <ul>
  <li>[a] Windows Server 2012 - 64bit [b] .NET Framework 4.5 [c] SQL Server</li>
  </ul>
  
  <p>2012 Enterprise Server edition</p>
  
  <p>Now just because of the 144GB-RAM and high-volumen-HDD, our customer is expecting that the application should run "super-fast" and thus perform better. </p>
  
  <p>The customer is a completely non-IT organization. It has already to explain to them, irrespective of however high the RAM/HDD gets increased, the Windows-OS ultimately has limitations to how much memory it can allocate to a program (via .NET-framework and SQL-Engine) so that a given .NET program would "execute" in a nice-contiguous, flat, unsegmented memory area. </p>
  
  <p>They are NOT able to DIGEST this argument. So I have googled to see if there is any tech-article, blog or any such thing which explains on these lines, but without much success. Basically what needs to be conveyed through some web-article reference is : <em>no matter how much ever, you make your hardware better, the amount of memory allocated to an executing program is governed and limited by OS.</em></p>
  
  <p>Is there any MSDN link or Red-Gate-profiler analysis which gives some numbers to suggest the maXimum memory that gets allocated by Windows-64bit-Server-2012 to a given .NET-program's execution (or even a SQL-2012-store-procedure's execution). </p>
  
  <p>For example -- This link <a href="http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory" rel="nofollow">http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory</a> says the following for a 32-bit OS.
  <em>"Each process in a multi-tasking OS runs in its own memory sandbox. This sandbox is the virtual address space, which in 32-bit mode is always a 4GB block of memory addresses."</em></p>
  
  <p>I am seeking something similar, as blog/msdn reference, for a 64-bit Windows-SERVER-2012 OS and IF that article(s) speaks more from a .NET-Framework-CLR perspective then, that would be "rivetting"...!!!</p>