Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / .NET Framework / New Users / March 2006

Tip: Looking for answers? Try searching our database.

.Net 2.0 app behavior on 64-bit machine.

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Sriram - 06 Mar 2006 17:01 GMT
Hi,

I have an 1.1 .net app ported to 64-bit 2.0 framework that uses a 3rd party
CAD drawing DLL(natively 32-bit but runs in WOW mode on 64-bit per their
documentation).

There does not seem to be any improvement wrt performance (that is, the .net
app running on 1.1 on a 32-bit machine using their 32 bit DLL). Am I missing
something here?

Or, is the 32-bit 3rd party CAD generating DLL a bottleneck, though they
claim that on 64-bit boxes, their DLL can address the 4GB virtual memory
limit??

TIA
Sriram
Chris Mullins - 06 Mar 2006 18:24 GMT
> I have an 1.1 .net app ported to 64-bit 2.0 framework that uses a 3rd
> party
> CAD drawing DLL(natively 32-bit but runs in WOW mode on 64-bit per their
> documentation).

So you have a mixed application at this point. What Build Targets are you
compiling your .Net code to be?

> There does not seem to be any improvement wrt performance (that is, the
> .net
> app running on 1.1 on a 32-bit machine using their 32 bit DLL). Am I
> missing
> something here?

What kind of performance improvements were you expecting to see?

> Or, is the 32-bit 3rd party CAD generating DLL a bottleneck, though they
> claim that on 64-bit boxes, their DLL can address the 4GB virtual memory
> limit??

I would say it's unlikley their 32 bit dll is addressing 4GB of virtual
memory.

If I remember right, a process is either 32 bit or 64 bit, but not both. So
if you have a 32 bit DLL, your whole process is going to be 32 bit.

Signature

Chris Mullins

David Browne - 06 Mar 2006 18:42 GMT
>> I have an 1.1 .net app ported to 64-bit 2.0 framework that uses a 3rd
>> party
[quoted text clipped - 21 lines]
> If I remember right, a process is either 32 bit or 64 bit, but not both.
> So if you have a 32 bit DLL, your whole process is going to be 32 bit.

32-bit processes running on 64-bit windows in WOW64 can use the whole 4GB of
addressable memory because there is no reservation of address space for
kernel mode code in WOW64.  This will work so long as the executable is
marked as LARGEADDRESSAWARE.

David

Now whether this translates into
David Browne - 06 Mar 2006 18:57 GMT
>>> I have an 1.1 .net app ported to 64-bit 2.0 framework that uses a 3rd
>>> party
[quoted text clipped - 26 lines]
> kernel mode code in WOW64.  This will work so long as the executable is
> marked as LARGEADDRESSAWARE.

A quick experiment shows that apps compiles for the x64 target are marked as
LARGEADDRESSAWARE, and apps compiled for AnyCPU are not.

David
Willy Denoyette [MVP] - 06 Mar 2006 22:38 GMT
C# Applications compiled with /platform:x64 do not run in WOW64, they run as
full X64 executables, as such they are LARGEADDRESSAWARE by default.

Willy.

| >>> I have an 1.1 .net app ported to 64-bit 2.0 framework that uses a 3rd
| >>> party
[quoted text clipped - 31 lines]
|
| David
Chris Mullins - 06 Mar 2006 19:04 GMT
>> I would say it's unlikley their 32 bit dll is addressing 4GB of virtual
>> memory.
[quoted text clipped - 5 lines]
> of addressable memory because there is no reservation of address space for
> kernel mode code in WOW64.

That's interesting. It makes sense, as I think about it.

> This will work so long as the executable is marked as LARGEADDRESSAWARE.

This is a VC++ linker setting, which isn't easy to set for C# or VB.Net.

Do you know which piece of the process needs this stamp? Is it the Exe
that's generated by .Net, or the Win32 Dll that's loaded into the address
spaces? My guess would be the initial Exe that loads the process - but
that's nothing more than a guess.

Signature

Chris Mullins

Sriram - 07 Mar 2006 14:50 GMT
Should I be re-compiling *all* the DLLs down the tree that my main .exe
consumes as 'LARGEADDRESSAWARE' or just the main exe as 'LARGEADDRESSAWARE'?

How do I know if a DLL/.exe is 'LARGEADDRESSAWARE' - in the PE format? using
ILDASM?? I thought 'AnyCPU' compilation on x64 machines would somehow make
the DLLs/exe's as LARGEADDRESSAWARE.

I am using VB.Net. Any help is appreciated...

TIA
Sriram

> >> I would say it's unlikley their 32 bit dll is addressing 4GB of virtual
> >> memory.
[quoted text clipped - 16 lines]
> spaces? My guess would be the initial Exe that loads the process - but
> that's nothing more than a guess.

Rate this thread:







Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.