Answered Increase the memory limit

  • Wednesday, March 07, 2007 9:51 AM
     
     

    Hi Everyone

    I try to allocate more than 2 GB in .NET process on an x86 platform.
    For this, I’ve enabled the 4GT RAM mode into my Windows XP kernel. This mode work fine for native process ( after rebuilding my program with a special flag /LARGEADDRESSAWARE) but take no effect on my assemblies (the managed memory limit still stay at 1,5 GB) .

    Someone know how to configure the .net framework for working in large addressing mode ?

    Thanks

    ps : sorry for my poor english ,I hope you understand me ...

All Replies

  • Wednesday, March 07, 2007 6:09 PM
     
     Answered

    Hi Eric

    Booting the OS into /3GB mode and marking your assemblies as /LARGEADDRESSAWARE, the .NET runtime will allow your app to use up to approx 3GB of address space.  However, depending on how you're allocating, there may not be a contiguous block of memory large enough to satisfy your allocation.  Also, .NET imposes a 2GB object size limit, so trying to allocate an array larger than 2GB will fail.

    If you require more address space that this, you should consider moving to 64-bit.

    See http://www.microsoft.com/whdc/system/platform/server/PAE/PAEmem.mspx for details on 3GB.

    Hope that helps

    -Chris

  • Friday, April 06, 2007 9:58 PM
     
     

    I am having a similar issue.  How do I mark an assembly as /LARGEADDRESSAWARE?

     

    Thanks

    Mike

  • Friday, April 06, 2007 10:06 PM
     
     

    Hi Mike


    From the link I posted above:

     

    To set this bit, you must use Microsoft Visual Studio Version 6.0 or later and the Editbin.exe utility, which has the ability to modify the image header (/LARGEADDRESSAWARE) flag. For more information on setting this flag, see the Microsoft Visual Studio documentation.

     

    -Chris

  • Monday, April 09, 2007 7:47 PM
     
     

    Excellent, thanks.  I got this to work.

     

    Now, I am trying to automate my build process so that the published smart client app is large address aware.  I have created a .bat file that contains the editbin command, and have added this .bat file as a post-build command and have gotten this to build successfully.  However, when I try to publish my smart client app to a network share, the published .exe.deploy is not large address aware.  Also, only the .exe in the bin\Release folder is large address aware, and not the .exe.deploy in the \bin\Release\publishing directories.

  • Tuesday, April 10, 2007 4:26 PM
     
     

    I think I figured out my own problem.  It looks like the exe that will be published is first created in the obj\release or obj\debug directory, depending on if this is a release or debug build.  Then, the postbuild is run before the .exe is copied to the bin\release\*.publish\publish version directory.  Here are my postbuild commands

     
      $(ProjectDir)postbuild.bat $(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName) $(TargetPath)

     

    and here is my postbuild.bat file

     

    echo off

    call "%VS80COMNTOOLS%vsvars32.bat"

    editbin /largeaddressaware %1

    editbin /largeaddressaware %2

     

    Mike

  • Sunday, April 22, 2007 9:27 AM
     
     Proposed Answer

    Excellent script - very useful :-)

     

    I have a space in my .exe filename, so I had to change the postbuild step to:

     

    $(ProjectDir)EditBin.bat "$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)" "$(TargetPath)"

     

    (Added some "s)

     

    PS - why is the editbin command run twice? (%1 and %2)

     

    -Torbjørn

    • Proposed As Answer by dbooksta Friday, May 07, 2010 8:33 PM
    •  
  • Wednesday, September 26, 2012 6:07 PM
     
     

    Probably because he's passing 2 cmd line arguments to the .bat file - one for the primary .exe and perhaps a related .dll that is being built in the project?  Just a guess.

    The first line adds the setting to the first argument of the .bat file, the second line to the 2nd argument.
    • Edited by alderson21 Wednesday, September 26, 2012 6:08 PM
    •