相关疑难解决方法(0)

如何使.NET应用程序"大地址识别"?

假设我使用/ 3GB开关启动了32位Windows Server,如何让.NET应用程序使用额外的地址空间?

.net memory windows

36
推荐指数
2
解决办法
3万
查看次数

Visual Studio 2017中的vsvars32.bat

作为Visual Studio安装程序是新从Visual Studio 2017年的版本,我不能位于Visual C++的组成部分,说明这里.

我如何进入vsvars32.batVS2017?

visual-studio-2017

36
推荐指数
4
解决办法
3万
查看次数

为什么'任何CPU(更喜欢32位)'允许我在.NET 4.5下分配比x86更多的内存?

根据许多SO答案和这篇被广泛引用的博客文章,为所有选择了'prefer 32-bit'选项的'Any CPU'构建的.NET 4.5应用程序将在32位和64位上作为32位进程运行系统(与.NET 4.0及更早版本不同).换句话说,选择'prefer 32-bit'的x86和AnyCPU是等效的(忽略它是否可以在ARM上运行).

但是,我的测试表明,在64位系统上,"AnyCPU更喜欢32位"应用程序(我确认运行32位)可以分配比x86更多的内存.我编写了一个.NET 4.5 C#控制台应用程序,它在循环中分配10MB字节数组(当然保留引用)直到它遇到OutOfMemoryException,并在具有大量RAM的64位系统上运行它.当构建为x86时,它会分配大约1.2GB.构建为"任何CPU(更喜欢32位)"的相同代码最高可达1.5GB.

为什么不同?

.net c# out-of-memory .net-4.5 visual-studio-2015

16
推荐指数
1
解决办法
1531
查看次数

使用任何CPU集编译C#应用程序可以处理大(> 2GB)地址

我在性能测试期间遇到了这个问题.

使用x86平台标志编译C#控制台应用程序时,未设置Large Address Aware标志:

dumpbin/headers app.exe的输出:

Dump of file app.exe

PE signature found

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
             14C machine (x86)
               3 number of sections
        569F0089 time date stamp Tue Jan 19 21:35:37 2016
               0 file pointer to symbol table
               0 number of symbols
              E0 size of optional header
             102 characteristics
                   Executable
                   32 bit word machine
Run Code Online (Sandbox Code Playgroud)

将标志设置为"Any Cpu"时,生成的exe是Large Address Aware:

Dump of file app.exe

PE signature found

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
             14C machine (x86)
               3 …
Run Code Online (Sandbox Code Playgroud)

c# memory visual-studio visual-studio-2015

6
推荐指数
1
解决办法
3563
查看次数

我怎样才能使用更多内存?

我需要使用动态RAM强制终端服务器为我的精简运行.NET应用程序提供更多RAM,从而减少.NET GC RAM压力并提高性能.

对于使用X86作为目标编译的大型Microsoft .NET C#WinForms应用程序,是否有垃圾收集器或其他.NET Framework设置可用于允许我的应用程序使用更多RAM来提高性能,而不是让.NET垃圾收集器试图保持RAM控制如此紧张?

我希望有一些.NET GC提示,设置或.NET框架函数调用来调整它运行的精简程度.

原因: 我的应用程序在其工作时间内的每个工作日被数千个终端服务器上的数万个用户使用.在15年的部署期间,我发现当每个实例提供大约1.85GB的RAM时,应用程序将充分运行.

我们已经进行了重大的开发,以确保最小的RAM使用率和内存泄漏得到控制.(IE:Using(){},在每个对象上调用Dispose等等)

然而,这是一个巨大的应用程序,几乎完成了客户业务操作的所有任务,包括一些图形和更多,我期望大量的RAM使用.

在我们删除旧的第三方GUI控件之前,我无法更改为64位,这将需要数月的开发和管理不会让我安排,因为它不会提供任何直接的最终用户升级.(除了总体上更好的表现....)

问题在于说服主机终端服务器的客户的IT公司添加所需的RAM以保持性能.他们的典型论点是,虚拟机不会报告大量的RAM使用情况,这就意味着我需要花费几天的时间来说服他们,这不是在这种情况下使用的最佳指标.

此外,对于使用动态RAM的服务器,可以降低应用程序性能,而无需正确增加OS RAM.

我的目标是调整一些设置以允许更多的RAM使用(不使用不需要/假的内存消耗)并推动这些服务器根据需要分配更多的RAM.

.net c# memory performance garbage-collection

5
推荐指数
1
解决办法
820
查看次数