.NET 进程可以分配的最大内存

2024-01-09

垃圾收集器可以为 .NET 进程分配的最大内存是多少?当我编译到 x64 时,Process.GetCurrentProcess.MaxWorkingSet 返回大约 1,4GB,但是当我编译到 AnyCPU (x64) 时,返回相同的数字。对于 x64,它应该更像是任务管理器中显示的“限制”值。我怎样才能获得在所有情况下超出时都会导致 OutOfMemory-Exceptions 的正确数字?

该方法应返回的一些示例:

1)机器配置:x64-Windows,4GB物理内存,4GB页面文件
-64位进程:8GB
-32 位进程:1.4GB

2)机器配置:x64-Windows,1GB物理内存,2GB页面文件
-64 位进程:3GB
-32 位进程:1.4GB

3)机器配置:x32-Windows,4GB物理内存,4GB页面文件
-作为 64 位进程:不会发生
-32 位进程:1.4GB

4)机器配置:x32-Windows,512MB物理内存,512MB页面文件
-作为 64 位进程:不会发生
-32位进程:1.0GB


Windows 可以配置为按需分配更多页面文件空间,或者根据要求 http://windowshelp.microsoft.com/Windows/en-GB/help/89ca317f-649d-40a6-8934-e5707ee5c4b81033.mspx.
工作对象 http://msdn.microsoft.com/en-us/library/system.activities.design.base.propertyediting.editorreuseattribute(VS.100).aspx可以防止消耗超过一定量的内存。
堆的碎片及其分代性质(加上需要将大量内容放入大型对象堆中)

所有这些都意味着硬限制在现实中没有多大用处,并且意味着回答“理论上我可以分配多少内存”的问题比您想象的要复杂得多。

因为它很复杂任何人asking这个问题可能是想尝试做某事wrong并且应该将他们的问题转向更有用的问题。

你想做什么而显得有必要提出这样的问题?

“我只是想知道进程的当前内存负载何时会出现问题 这样我就可以采取一些措施,例如释放自定义缓存中的某些项目。”

正确的。这是一个更容易处理的问题。

两种解决方案(按复杂程度排序):

  1. Make your caches use WeakReferences http://msdn.microsoft.com/en-us/library/system.weakreference.aspx
    • 这意味着系统几乎会神奇地为您释放一些东西,但您对替换政策等事情几乎没有控制权
    • 这依赖于缓存的数据比键大得多以及弱引用的开销
  2. Register for notification of Garbage Collections http://msdn.microsoft.com/en-us/library/cc713687.aspx
    • 这可以让您控制释放事物。
    • 您依赖于具有适合 GC 代的最大大小的系统,这可能需要一段时间才能达到稳定状态。

注意事项。 是吗really维护如此庞大的缓存(根据声音存储到磁盘)比重新计算/重新请求数据更便宜。
如果您的缓存在常见/连续请求的项目之间表现出较差的局部性,那么将花费大量精力将数据分页进出。具有有效调整的替换策略的较小缓存很有可能获得更好的性能(并且对其他正在运行的程序的影响要小得多)

顺便说一句:在 .Net 中,由于内存管理的核心 CLR 结构的限制,任何可变大小的对象(字符串、数组)的大小都不能超过 2GB。 (以上任一解决方案都将从中受益)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET 进程可以分配的最大内存 的相关文章

  • 终结器线程的范围是什么 - 每个应用程序域或每个进程?

    根据我的所有阅读 应该有一个 GC 线程来调用所有终结器 现在的问题是这个 一个 线程的范围是什么 每个进程或每个应用程序域 因为域的整体目的是在一个进程空间中分离并创建 独立 的不同应用程序 I read here http dn cod
  • StringComparison.InvariantCultureIgnoreCase 去哪儿了?

    我正在将 C 代码移植到 Windows 应用商店应用程序 令我惊讶的是 以下代码不再起作用 someString Equals someOtherString StringComparison InvariantCultureIgnore
  • 正则表达式的命名空间不起作用

    我正在翻新一些曾经在 NET Framework 3 5 上运行的旧代码 使其能够使用 C 在 NET Framework 4 上运行 以下正则表达式过去在 3 5 版本中运行良好 但由于某些奇怪的原因不再运行 public static
  • 两个 RichTextBox 具有相同的滚动条

    是否有任何可用的第三方工具有两个富文本框 但两者只有一个共享滚动条 我需要用两种不同的语言实现一些文本 但两个文本框应该同时滚动 public enum ScrollBarType uint SbHorz 0 SbVert 1 SbCtl
  • 在 Azure 上运行 .NET 应用程序

    我拥有在 Amazon EC2 上运行应用程序的丰富经验 它需要一台低端服务器 我目前为该服务器支付大约 90 美元 月 是的 我知道我并不真正需要可扩展性 但我仍然使用 EC2 我想知道将这个纯粹的 NET 应用程序迁移到 Microso
  • ASP.NET Core Identity 更改登录 URL

    我正在使用 ASP NET Core 2 1 并且使用脚手架来添加身份 工作正常 除了当我尝试转到需要登录的页面时 它需要我 Identity Account Login ReturnUrl 如何将其更改为仅转到 Account Login
  • KeyValuePair - 没有无参数构造函数?

    我有一个具有 KeyValuePair 类型属性的对象 我想从数据库读取一些数据并将结果存储在这个 KeyValuePair 类型字段中 myObject KeyValuePairs ctx ExecuteQuery
  • 为什么有些控件同时具有BackgroundImage和Image属性?

    为什么有些控件喜欢Button or PictureBox两者都有BackgroundImage and Image财产 为什么在按钮的情况下需要它们两个 或者为什么在图片框中背景图像应该可用 BackgroundImage继承自Contr
  • Nhibernate:连接表并从其他表获取单列

    我有以下表格 create table Users Id uniqueidentifier primary key InfoId uniqueidentifier not null unique Password nvarchar 255
  • 将 dll 注册到 GAC 或从 ASP.NET 中的 bin 文件夹引用它们是否更好

    如果答案是 视情况而定 您能否提供一个简短的解释 GAC 旨在包含以下组件跨多个应用程序共享 如果是这种情况 您应该对程序集进行强命名并向 GAC 注册 如果不是 请将程序集保留为私有程序集并将其作为项目 dll 引用进行引用 PS 没有真
  • IDisposable 的显式实现

    虽然有很多关于IDisposable在 SO 上找到 我还没有找到答案 我通常遵循这样的做法 当我的一个班级拥有一个IDisposable对象然后它也实现IDisposable并打电话Dispose在拥有的对象上 然而最近我遇到了一个类 它
  • vb.net HtmlAgilityPack 在 div 之后插入字符串

    我试图在 div 末尾直接插入一些我自己的 html 这个 div 里面有其他 div Dim HtmlNode As HtmlNode HtmlNode CreateNode span class Those were the frien
  • 忽略挂起的更改中的某些文件

    这是我的问题 我已经更改了解决方案中的某些文件 假设是 Web config 并且永远不想签入 因为这些更改仅涉及我的计算机 有没有办法在 TFS 中忽略某个文件中的更改并将其从挂起的更改窗口中删除 当然 我可以在每次签入时跳过这个文件 但
  • MVC2 中隐藏字段的替代方案

    我有一个 viewModel 其中包含一个在传递给部分视图之前填充的字符串 我需要能够在发布表单时取回数据 目前我已经创建了一个隐藏字段并将数据绑定到它 然后 当回发时 我可以从表单集合中获取数据 这并不完全是我想要的 我希望数据完全隐藏在
  • 如何将 Integer8 值转换为 DateTime?

    如何将 Integer8 类型值转换为 DateTime 类型值 特别是 我正在尝试获得帐户过期采用人类可读形式的 Active Directory 用户属性 SearchResult GetDirectoryEntry Propertie
  • C# 中字典的内存使用情况

    我有一些代码添加了嵌套字典 格式如下 Dictionary
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • 为什么 std::allocator 在 C++17 中丢失成员类型/函数?

    一边看着std 分配器 http en cppreference com w cpp memory allocator 我看到成员 value type pointer const pointer reference const refer
  • 哪些属性有助于运行时 .Net 性能?

    我正在寻找可用于通过向加载器 JIT 编译器或 ngen 提供提示来确保 Net 应用程序获得最佳运行时性能的属性 例如我们有可调试属性 http msdn microsoft com en us library k2wxda47 aspx
  • 如何打开 Windows 资源管理器窗口并选择特定文件夹

    我有一个 winform 应用程序 这个 winform 应用程序创建了几个文件 我想在我的应用程序中实现 查找目标 功能来显示这些文件 这些文件位于同一文件夹中 看图片 假设我创建了几个文件 C Test 文件夹 该文件夹包含以下文件 C

随机推荐

  • Unity Visual Studio C#版本同步

    我刚刚开始在 Unity 游戏中使用委托和事件在适当的时候更新标签 而不是每帧更新标签 尽管大多数时候没有发生任何变化 为了确保静态事件调用 public static event OnSomething onSomething 实际上有听
  • 容器“gcr.io/google_containers/pause:0.8.0”中的进程做了什么工作?

    我已经清楚地了解了 docker 选项的用法 net container NAME or ID 我还阅读了kubernetes的源代码 了解如何配置容器使用网络InfraContainer 所以我认为唯一在容器中工作的过程gcr io go
  • 如何根据阈值改变字体颜色

    我有一个要求 比如如果阈值大于 6 则文本颜色应显示为红色 在 5 6 之间 文本颜色应更改为黄色 我在第一个要求 iif fields My column value gt 6 red Black 的文本框字体颜色属性中尝试了这个表达式
  • 最有效的方法...唯一的随机字符串

    我需要有效地将 5 个字符的随机字符串插入数据库 同时确保它是唯一的 生成随机字符串不是问题 但目前我正在做的是生成字符串 然后检查数据库是否已经存在 如果存在 我会重新开始 有没有更有效的方法来完成这个过程 请注意 我不想使用 GUID
  • 如何在 keydown 中停止按键事件

    我怎样才能停下来keypresskeydown 处理程序中的事件 即使从 keydown 中也无法停止按键 它们都是非常独立的事件 您可以做的是在读取字符后取消按键 按键 这是我只允许在文本框中输入字母和数字的方法 jQuery urlBo
  • Nuxt Vue 中的 Splidejs

    有没有人尝试过在 Nuxt 中使用 Vue 解决方案作为插件或模块 我在尝试以正确的方式做到这一点时遇到了很多挑战 我正在尝试将 Splide Vue 滑块从 NPM 导入 Nuxt 通过 NPM 安装它后 如何将其导入插件中的 splid
  • “->”(箭头运算符)和“.”有什么区别Objective-C 中的(点运算符)?

    在 Objective C 中 通过使用访问类中的变量有什么区别 gt 箭头运算符 和 点运算符 是 gt 用于直接访问 vs 点 不是直接的吗 gt 是传统的 C 运算符 用于访问指针引用的结构的成员 由于 Objective C 对象
  • 在 Safari 中隐藏文本区域调整大小手柄

    我在应用程序中使用文本区域组件 并动态控制它们的高度 当用户键入时 只要有足够的文本 高度就会增加 这在 IE Firefox 和 Safari 上运行良好 然而 在 Safari 中 右下角有一个 手柄 工具 允许用户通过单击和拖动来调整
  • 如何将 dapper 与 ASP.Net core Identity 结合使用?

    我有一个数据库 我尝试使用 dapper 和 Core Identity 来查询数据库 但我现在陷入困境 我正在使用 IdentityUser 界面中的用户 public class User IdentityUser 使用 dapper
  • 使用 SemanticResultKey 时出现 TargetInitationException

    我想建立我的语法来接受多个数字 当我重复数字 例如说 二十一 时 它有一个错误 所以我不断减少代码来找出问题所在 我为语法生成器编写了以下代码 string numberString one Choices numberChoices ne
  • Orchard 根据过滤的下拉选择创建投影或搜索

    我认为 我有一个简单的功能 我试图将其添加到我的 Orchard 1 6 站点 但我找不到任何有关如何执行此操作的教程或说明 我有一个名为 Office 的自定义类型 每个办公室都有一个名为 State 的自定义字段 指示办公室所在的州 实
  • 当块后代时关注 ListView 中的 EditText (Android)

    我有一个定制的ListView 每行都有一个EditText Buttons TextView 为了使 ListView 项目可点击 我保留了android descendantFocusability blocksDescendants
  • 如果字典键不可用,则返回默认值

    我需要一种方法来获取字典值 如果其键存在 或者简单地返回None 如果没有 然而 Python 提出了一个KeyError如果您搜索不存在的键 则会出现异常 我知道我可以检查密钥 但我正在寻找更明确的内容 有没有办法直接返回None如果密钥
  • 如何在 OSX 上从命令行打开 Visual Studio Code?

    The docs https code visualstudio com docs codebasics launching vscode提到一个名为的可执行文件code 但我不确定在哪里可以找到它 以便我可以将其放在我的路径上 我从 VS
  • div 边框半径问题(在 Firefox 和 Opera 上)

    正如你所看到的 有两张图片 首先 在 chrome 上 右侧有 Be en 和 Yorumlar 按钮 边框看起来非常好 但第二张照片显示 firefox和opera有边框半径的问题 我尝试做边框宽度 薄 边框 1px实心等 但它看起来一样
  • EC.element_to_be_clickable 和 EC.presence_of_element_ located 之间单击()元素的区别

    我在间歇性单击某个元素时遇到 TimeoutExceptions 我尝试过显式等待和 time sleep 它工作了一段时间 我一次又一次地遇到例外 我想了解这是否是由预期条件引起的 WebDriverWait self driver 40
  • 简单饼图:错误百分比未居中?

    我有一个 symfony 项目 我使用 bootstrap 作为样式 并且我想使用 Easy Pie Chart 作为仪表板页面 所以 在 base html twig 中 block stylesheets endblock block
  • 将任意 GUID 编码为可读 ASCII (33-127) 的最有效方法是什么?

    GUID 的标准字符串表示形式大约需要 36 个字符 这非常好 但也非常浪费 我想知道如何使用 33 127 范围内的所有 ASCII 字符以最短的方式对其进行编码 简单的实现会产生 22 个字符 只是因为128 bits 6 bits产量
  • 来自旋转 JSON 的 D3 多系列折线图

    这里有一个很好的多系列折线图示例http bl ocks org mbostock 3884955 http bl ocks org mbostock 3884955如果 tsv 数据被布置出来 我确信它会看起来像这样 date 20111
  • .NET 进程可以分配的最大内存

    垃圾收集器可以为 NET 进程分配的最大内存是多少 当我编译到 x64 时 Process GetCurrentProcess MaxWorkingSet 返回大约 1 4GB 但是当我编译到 AnyCPU x64 时 返回相同的数字 对于