.Net 中字符串(或任何其他对象)的内存使用情况

2024-02-16

我写了这个小测试程序:

using System;

namespace GCMemTest
{
    class Program
    {
        static void Main(string[] args)
        {
            System.GC.Collect();

            System.Diagnostics.Process pmCurrentProcess = System.Diagnostics.Process.GetCurrentProcess();

            long startBytes = pmCurrentProcess.PrivateMemorySize64;

            double kbStart = (double)(startBytes) / 1024.0;
            System.Console.WriteLine("Currently using " + kbStart + "KB.");

            {
                int size = 2000000;
                string[] strings = new string[size];
                for(int i = 0; i < size; i++)
                {
                    strings[i] = "blabla" + i;
                }
            }

            System.GC.Collect();

            pmCurrentProcess = System.Diagnostics.Process.GetCurrentProcess();
            long endBytes = pmCurrentProcess.PrivateMemorySize64;

            double kbEnd = (double)(endBytes) / 1024.0;
            System.Console.WriteLine("Currently using " + kbEnd + "KB.");

            System.Console.WriteLine("Leaked " + (kbEnd - kbStart) + "KB.");
            System.Console.ReadKey();
        }
    }
}

发布版本中的输出是:

Currently using 18800KB.
Currently using 118664KB.
Leaked 99864KB.

我假设 GC.collect 调用将删除分配的字符串,因为它们超出了范围,但看起来并没有。我不明白,也找不到解释。也许这里有人吗?

谢谢, 亚历克斯


您正在查看私有内存大小 - 托管堆将扩展以容纳字符串,但当字符串被垃圾收集时,它不会将内存释放回操作系统。相反,托管堆会更大,但有大量可用空间 - 因此,如果您创建更多对象,则不需要扩展堆。

如果你想看内存used在托管堆中,查看GC.GetTotalMemory http://msdn.microsoft.com/en-us/library/system.gc.gettotalmemory(v=VS.100).aspx。请注意,由于垃圾收集的复杂性,所有这些都存在一定程度的混乱。

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

.Net 中字符串(或任何其他对象)的内存使用情况 的相关文章

  • 将 2D 数组映射到 1D 数组

    我想用一维数组来表示一个二维数组 函数将传递两个索引 x y 和要存储的值 这两个索引代表一维数组的单个元素 并相应地设置它 我知道一维数组需要具有 arrayWidth arrayHeight 的大小 但我不知道如何设置每个元素 例如 如
  • 在 Windows Phone 上启动 pdf 文件时出现 System.Runtime.InteropServices.COMException

    我正在尝试使用我之前在另一个应用程序上使用过的以下工作代码打开 pdf 文件 但这一次 当流程到达此行时 我收到 System Runtime InteropServices COMException Windows System Laun
  • 字节到二进制字符串 C# - 显示所有 8 位数字

    我想在文本框中显示一个字节 现在我正在使用 Convert ToString MyVeryOwnByte 2 但是 当字节开头有 0 时 这些 0 就会被删除 例子 MyVeryOwnByte 00001110 Texbox shows g
  • 对数字进行向上和向下舍入 C++

    我试图让我的程序分别向上和向下舍入数字 例如 如果数字是3 6 我的程序应该四舍五入最接近的数字 4 如果该数字是3 4 它将向下舍入为 3 我尝试使用ceil库获取 3 个项目的平均值 results ceil marks1 marks2
  • 组合 Datepicker 和 Timepicker 值 Win 8.1

    我试图同时使用 Datepicker Timepicker 来返回可以存储在数据库中的 DateTime 例如 我想要安排会议的开始日期和结束日期 如果适用 我将如何将这些值组合成 SQL 数据库可以处理的正确格式 任何反馈都会很棒 我让这
  • C中有const吗?

    这个问题可能很幼稚 但是 有没有constC 中的关键字 从哪个版本开始 之间有任何语义和 或句法差异吗const在 C 和 C 中 C 和 C 之间在语法上没有差异const关键字 除了一个相当晦涩的关键字 在 C 中 自 C99 起 您
  • 如何检测斑点并将其裁剪成 png 文件?

    我一直在开发一个网络应用程序 我陷入了一个有问题的问题 我会尝试解释我想要做什么 在这里您看到第一个大图像 其中有绿色形状 我想要做的是将这些形状裁剪成不同的 png 文件 并使它们的背景透明 就像大图像下面的示例裁剪图像一样 第一张图像将
  • 如何在不使用reinterpret_cast的情况下使用dlsym()加载函数?

    我正在尝试使用 clang tidy 来强制执行 C 核心指南 虽然它确实有很多有效点 但有一件事我无法真正解决 dlsym 返回一个void 我需要以某种方式将其转换为正确的函数指针 为此 我使用reinterpret cast 由于指南
  • 使用 Linq 进行异步Where过滤

    我有一个List通过填充的元素async调用 WebService 没问题 我需要过滤该列表以便在应用程序视图上显示某些内容 我试过这个 List
  • 如何在 C++ 中使用 PI 常数

    我想在一些 C 程序中使用 PI 常数和三角函数 我得到三角函数include
  • 如何从枚举中选择随机值?

    给定 C 中的任意枚举 如何选择随机值 我没有找到这个非常基本的问题 我会在一分钟内发布我的答案作为任何人的参考 但请随意发布你自己的答案 Array values Enum GetValues typeof Bar Random rand
  • 用 C# 编写的带有点击移动的 WPF 游戏

    我试图将标签网格移动到鼠标的位置 就像冒险游戏中的移动一样 理想情况下 我会在途中删除并重新绘制它们 但是 现在我只想弄清楚如何将 int 转换为厚度或 pointtoscreen 到目前为止我有 player XMove int Mous
  • SSBO 是更大的 UBO?

    我目前正在 OpenGL 4 3 中使用 UBO 进行渲染 以将所有常量数据存储在 GPU 上 诸如材料描述 矩阵等内容 它可以工作 但是 UBO 的小尺寸 我的实现为 64kB 迫使我多次切换缓冲区 减慢渲染速度 我正在寻找类似的方法来存
  • C# - 为什么我需要初始化 [Out] 参数

    我有几个从本机 dll 导入的方法 使用以下语法 internal static class DllClass DllImport Example dll EntryPoint ExampleFunction public static e
  • 删除对象时指针自动指向空

    假设我有一个对象和其他几个不同类类型的对象中的 10 个指向它的指针 如果对象被删除 这些指针必须设置为空 通常我会将对象的类与具有指向它的指针的类互连 以便它可以通知它们它正在被删除 并且它们可以将它们的指针设置为空 但这也有一个负担 即
  • 在 unix 中编译 dhrystone 时出错

    我是使用基准测试和 makefile 的新手 我已经从下面的链接下载了 Dhrystone 基准测试 我正在尝试编译它 但我遇到了奇怪的错误 我尝试解决它 但没有成功 有人可以帮助我运行 dhrystone 基准测试吗 以下是我尝试编译的两
  • 如何使复选框不可选择?

    我想知道你是怎么做的CheckBox在c 中无法选择 我认为这会是类似 SetSelectable false 之类的东西 但我似乎看不到该方法 I found CanSelect但这似乎是只读属性 您可以设置自动检查 http msdn
  • 如何仅更改 DateTime 的日期部分,同时保留时间部分?

    我在代码中使用了很多 DateTime 我想将这些日期时间更改为我的特定日期并保留 时间 1 2012 02 02 06 00 00 gt 2015 12 12 06 00 00 2 2013 02 02 12 00 00 gt 2015
  • Windows 上 libcurl 的静态库[重复]

    这个问题在这里已经有答案了 如何将此库 libcurl 静态链接到 exe 我努力了 disable share enable static 没有帮助 我使用的是MingW32 有没有一种简单的方法来静态链接这个库 这样我的应用程序就不再有
  • ASP.NET Core:会话 ID 始终变化

    今天启动了一个全新的 ASP NET Core 网站 按照说明添加会话 我们在索引页上打印出会话 ID 它始终是唯一的 我认为这可能是 cookie 合规性 所以我在 Chrome 的高级设置和调试器中删除了所有 cookie 但横幅不会再

随机推荐

  • Firebase:javascript on() 事件中的查询过滤

    有没有办法过滤我想要带回 ref on value 内部的每个子项的哪些属性 假设我有结构https www firebase com docs data struct html https www firebase com docs da
  • PHP-从CSS中提取图像路径

    我有一个这样的样式表 d2 position absolute background url img delete png no repeat 0px 1px color 0066CC reply position absolute bac
  • 如何控制 Maven 中测试的执行顺序?

    我需要按顺序运行测试 我在任何地方都找不到对此进行充分记录的地方 我更喜欢从命令行执行此操作 就像是 mvn Dtest test1 test2 test3 test5 test 我该怎么做呢 您无法指定测试的运行顺序 执行此操作的解决方法
  • 泛型类中的静态方法?

    在Java中 我想要这样的东西 class Clazz
  • ServerManager CommitChanges 进行更改时略有延迟

    我对 ServerManager 类 来自 Microsoft Web Administration 程序集 有一个小问题 我希望你们中的一些人可以帮助我 基本上 我需要在站点内创建一个新应用程序 使用 IIS 7 5 并将用户重定向到同一
  • 使用 git-svn:拉取、合并还是变基?

    我一直在与 git git svn 学习曲线作斗争 昨晚 作为学习曲线的一部分 我做了一些非常非常糟糕的事情 我已经纠正了它 但我希望以我的方式理解错误 我有一个 svn 存储库 我从中克隆了主干和分支 我忽略了标签 因为我们不处理这些标签
  • tinyMCE模糊事件

    你好 当用户在tinyMCE文本区域中完成书写并单击外部某处 onBlur 时 我想做一些事情 到目前为止我已经尝试过 id topic text parent live blur function alert asd I saw id t
  • 为什么在 C++ 中我们需要使用 `int main` 而不是 `void main`? [复制]

    这个问题在这里已经有答案了 为什么我们需要使用int main并不是void main in C 简短的回答是因为 C 标准要求main 回来int 您可能知道 返回值main 运行时库使用函数作为进程的退出代码 Unix 和 Win32
  • 如何从切片中删除最后一个元素?

    我见过有人说只需通过附加旧切片来创建一个新切片 slc append slc item slc item 1 但是如果你想删除切片中的最后一个元素怎么办 如果您尝试更换i 最后一个元素 与i 1 它返回越界错误 因为没有i 1 您可以使用l
  • Keras“pickle_safe”:Python 中的“pickle 安全”或“不可 picklable”是什么意思?

    Keras fit generator 有一个参数pickle safe默认为False 如果有的话 训练可以跑得更快ispickle safe 并相应地将标志设置为True 根据Kera 的文档 https keras io models
  • JMock- java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch()

    我知道解决方案是以某种方式确保 Junit 在 hamcrest 之后加载 我有一个 intellij 项目 在其中设置了一个外部库 其中包含 JUnit 和 JMock 以及 hamcrest 我怎样才能确保这个错误不会出现 junit
  • 迭代 Numpy 矩阵行以每行应用一个函数?

    我希望能够迭代矩阵以将函数应用于每一行 我该如何为 Numpy 矩阵做到这一点 您可以使用numpy apply along axis 假设你的数组是二维的 你可以像下面这样使用它 import numpy as np myarray np
  • 零长度数组

    我正在重构一些旧代码 并发现一些包含零长度数组的结构 如下 当然 警告被 pragma 抑制 但我无法通过包含此类结构的 新 结构创建 错误 2233 数组 byData 用作指针 但为什么不使用指针呢 或者长度为1的数组 当然 没有添加任
  • Ruby class_eval 方法

    我想弄清楚如何动态创建方法 class MyClass def initialize dynamic methods arr Array new dynamic methods arr each m self class class eva
  • Kotlin 中的普通类和数据类有什么区别?

    我尝试解决任务 6 DataClass 科特林公案 https github com vicboma1 Kotlin Koans named arguments 当我在代码中使用普通类时 测试用例失败 这是我的数据类代码 data clas
  • CMakeExternalProject_Add() 和 FindPackage()

    是否有正确的方法来查找图书馆 通过FindPackage 是用ExternalProject Add 问题是 CMake 无法在 CMake 时找到该库 因为外部库是在编译时构建的 我知道在超级构建中构建库和项目时可以组合这两个 CMake
  • 为什么投票机不开源? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 嗯 这只是与编程相关 但我想今天是选举日 对吧 是否有一个很好的理由说明为什么它们不开源 不一定是开源的 因为任何人都可以做出贡献 但开源是因为
  • 我可以在 Javascript 中识别(图形输入板)笔压吗?

    有没有办法使用 javascript 来识别笔压 最好我不想使用 Flash 并尝试将其作为纯 JS 完成 编辑 好吧 我意识到 Wacom 平板电脑有可能实现这一点 因为它们附带的软件可以与其 javascript api 配合使用 从而
  • 使用 pandas 忽略来自 openpyxl 的 UserWarning

    我有大量必须加载的 xlsm 文件 每个 Excel 文件有 6 个工作表 因此 我使用 pandas 打开每个 Excel 文件 for excel file in files list with pd ExcelFile excel f
  • .Net 中字符串(或任何其他对象)的内存使用情况

    我写了这个小测试程序 using System namespace GCMemTest class Program static void Main string args System GC Collect System Diagnost