时间:2019-03-07 标签:c#thread

2024-02-29

我正在学习有关线程的更多信息,并且我使用以下代码创建了一个相当简单的 WPF 应用程序(x64 平台构建)

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        for (var i = 0; i <= 20000; i++)
        {
            Thread thread = new Thread(Test);
            thread.IsBackground = true;

            thread.Start();
        }
    }

    public void Test()
    {
        Thread.Sleep(20000);
    }
}

当我运行此代码时,当所有线程都在运行/休眠时,进程大约需要 560MB 的 RAM。

完成后,进程使用量降至约 125 MB RAM。

我的问题是,当应用程序本身(没有线程示例)仅使用 30 MB RAM 时,为什么进程此时使用 125 MB RAM?

它是否使某些线程保持活动状态以供可能的重新/使用或发生其他事情?

EDIT:

由于一些如何改进此代码的建议,我想指出,我并不是在询问改进它的方法,而是要查明此行为的原因。

EDIT 2:

这与线程无关,但我尝试过一个大的案例string列表在内存中,并且没有产生相同的结果。当list完全加载到内存中时,大约需要1.3GB内存,但是当list设置为NULL, and GC.Collect()被调用后,内存使用量如预期回落至 30 MB。

Code:

public partial class MainWindow : Window
{
    List<string> stringArray = new List<string>();

    public MainWindow()
    {
        InitializeComponent();


        for (var i = 0; i <= 100000000; i++)
        {
            //Thread thread = new Thread(Test);
            //thread.IsBackground = false;

            //thread.Start();

            stringArray.Add("Some very long string to pump up the memory volume 2 reloaded");
        }

        stringArray = null;
        GC.Collect();
    }



}

当线程完成时,每个线程使用的部分内存将被释放。这就是当所有后台线程完成时内存消耗从 560 MB 下降到 125 MB 的原因。

其余内存分配在托管堆上,并将由垃圾收集器释放。

当您的应用程序处于空闲状态时,不会分配新内存,因此不需要运行垃圾收集器。您在评论中提到强制 GC 使用GC.Collect()没有帮助,但请记住Thread已实现终结器,因此它将在第一个集合中幸存。你将不得不使用

GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();

以确保内存被释放。

这应该将内存使用量减少到启动线程之前的水平。

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

时间:2019-03-07 标签:c#thread 的相关文章

  • 静态构造函数和 BeforeFieldInit?

    如果类型没有静态构造函数 则将执行字段初始值设定项 就在使用该类型之前 或者在某个时间点突发奇想 运行时 为什么这段代码 void Main start Dump Test EchoAndReturn Hello end Dump clas
  • 是否可以使用 http url 作为 DirectShow .Net 中源过滤器的源位置?

    我正在使用 DirectShow Net 库创建一个过滤器图 该过滤器图通过使用 http 地址和 WM Asf Writer 来流式传输视频 然后 在网页上 我可以使用对象元素在 Windows Media Player 对象中呈现视频源
  • C#.Net 邮件将进入垃圾邮件文件夹

    我正在从 ASP net Web 应用程序发送电子邮件 邮件发送成功 没有失败 但大多数都进入了垃圾邮件文件夹 请帮助我克服垃圾邮件过滤器 我的发送邮件代码 public void SendMail string FromAddress s
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • 如何在 C# 中将 Json 转换为对象

    我想将 Json 转换为 C 中的对象 这里的 Json 是 值 e920ce0f e3f5 4c6f 8e3d d2fbc51990e4 如何使用 Object 问题看似愚蠢 但其实并不那么愚蠢 我没有简单的 Json 我有 IEnume
  • C# 中一次性对象克隆会导致内存泄漏吗?

    检查这个代码 class someclass IDisposable private Bitmap imageObject public void ImageCrop int X int Y int W int H imageObject
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • MVC 5 中具有 ASP.NET Identity 的 Autofac 不会验证 OWIN 管道中的安全标记

    我在 MVC 5 中设置了 AutoFac 来与 ASP NET Identity 一起使用 表面上一切似乎都工作正常 即用户可以创建帐户并登录 但后来我发现 当安全标记更改时 用户不会注销 通过在 AspNetUsers 表中进行暴力破解
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • Unity手游触摸动作不扎实

    我的代码中有一种 错误 我只是找不到它发生的原因以及如何修复它 我是统一的初学者 甚至是统一的手机游戏的初学者 我使用触摸让玩家从一侧移动到另一侧 但问题是我希望玩家在手指从一侧滑动到另一侧时能够平滑移动 但我的代码还会将玩家移动到您点击的
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • 如何从 Windows Phone 7 模拟器获取数据

    我有一个 WP7 的单元测试框架 它在手机上运行 结果相当难以阅读 因此我将它们写入 XDocument 我的问题是 如何才能将这个 XML 文件从手机上移到我的桌面上 以便我可以实际分析结果 到目前为止 我所做的是将 Debugger B
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助
  • ContentDialog Windows 10 Mobile XAML - 全屏 - 填充

    我在项目中放置了一个 ContentDialog 用于 Windows 10 上的登录弹出窗口 当我在移动设备上运行此项目时 ContentDialog 未全屏显示 并且该元素周围有最小的填充 在键盘上可见 例如在焦点元素文本框上 键盘和内

随机推荐

  • 如何将数字转换为科学记数法?

    我想创建一个函数 它接受输入的值并将其转换为科学记数法 N x 10 a 我尝试了很多不同的事情 但我似乎无法做到正确 Example 我输入 200 转换器将其转换为 2 x 10 2 你可以这样做 a 200 a toExponenti
  • 解析错误:语法错误,意外的“mysql_query”(T_STRING)

    我是 php 新手 在更新表的某一列时遇到此错误 if isset POST approved change SELECT FROM workplan forchange mysql query change while infoChang
  • Grails 根据枚举列表属性中的枚举值选择域对象

    我在根据枚举列表中的值从域对象列表中选择项目时遇到问题 我的域对象如下所示 class Truck static hasMany makes Make 其中 Make 看起来像这样 enum Make KENWORTH MACK VOLVO
  • 非托管导出错误“RGiesecke.DllExport.MSBuild.DllExportAppDomainIsolatedTask”

    我在 Visual Studio 2017 编译 DLL 项目时遇到问题 我在包管理器控制台上执行了 Install Package UnmanagedExports 错误 无法从程序集 C Users Tom Desktop CSharp
  • NodeJS ping 端口

    我正在为我工 作的一家托管公司编写一个状态检查器 我们想知道如何使用 nodejs 检查端口的状态 如果可能的话 如果没有 你能建议任何其他想法 比如使用 PHP 和阅读 STDOUT 吗 是的 这可以很容易地使用net http node
  • Java EE 7 属性文件配置的最佳实践建议是什么?

    应用程序配置在现代 Java EE 应用程序中属于什么位置 人们有哪些最佳实践建议 通过应用程序配置 我的意思是诸如与其他设备上的服务的连接设置之类的设置 包括外部设备 例如 Twitter 和我们的内部 Cassandra 服务器 用于主
  • VS2015中如何设置工具提示颜色?

    我刚刚安装了 Visual Studio 2015 总体来说非常好 但是您可以在 工具 gt 选项 gt 字体和颜色 下配置的大量不同内容完全让我感到困惑 我需要找到允许我更改此工具提示颜色的设置 以便我可以实际阅读它 它在哪里 下载颜色主
  • php:: tmp 文件保留多长时间?

    我正在编写上传脚本 如果用户上传一个文件并且该文件已经存在 我想警告用户 这都是通过ajax 并让他们选择替换它或取消 而不是移动文件 我很好奇是否可以将文件保留在 tmp 中并在 ajax 响应中传回该文件的路径 如果用户说覆盖该 aja
  • Android 版 Chrome 无法正确显示 Google 网络字体

    我已经使用 CSS 重现了我遇到的问题font family以及 Android 版 Chrome Web 浏览器无法正确继承字体 而是使用后备字体 http jsbin com iyifah 1 edit http jsbin com i
  • RxJS - 使用成对确认和恢复输入字段

    所以我对可观察的东西有点陌生 我正在努力解决一个场景 我认为它可能是一个很好的候选问题 开始了 场景是这样的 我有一个下拉字段 当它改变时 我想要 检查基于条件以前的值和新的值领域的 如果条件通过 则请求用户确认 并且 如果用户未确认 则恢
  • Android 上的 Bootstrap 3 长模态滚动背景

    我有一个长模态框 无法在我的 Android 移动设备上完全显示 按钮位于屏幕底部下方 模态框根本不滚动 但模态框后面的灰色背景会滚动 是否有任何 css js锁定背景并允许模式在显示时滚动的技巧 可能是因为模态类位置是固定的 尝试将下面的
  • 当某些值丢失时如何绘制谷歌折线图?

    我在以下位置找到了以下 JavaScript 代码谷歌图表工具 http code google com apis chart interactive docs gallery imagelinechart html function dr
  • Colab 上的 gdrive 问题

    安装谷歌驱动器后 我正在使用 colab 在 cifar10 上训练 resnet 我克隆了存储库并且能够运行该脚本 然而 Tensorflow 已加载 数据文件已传递到网络 但我以以下内容结束 tensorflow python fram
  • Java中获取默认根目录

    我正在制作一个基本的文件浏览器 并且想知道如何获取默认根目录 我知道java io File listRoots 给出所有的根 对我来说是A C D E F G H I L T U X Y Z 但我想要用户主要使用的那个 即带有操作系统的那
  • XSD 中缺少响应和 DTO 对象

    我正在使用最新版本的 ServiceStack 和 NuGet 我已经有了一个基本的服务设置 可以与 JsonServiceClient 很好地配合 并且按预期通过了所有单元测试 不幸的是 我还尝试支持 SOAP 和 Visual Stud
  • 适用于 Microsoft Windows 的终端多路复用器 - GNU Screen 或 tmux 的安装程序 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找适用于 Microsoft Windows 的终端多路复用器 我无法找到 tmux 和 GNU Screen 的 Microso
  • AngularJS 指令根据指令名称的第一个字符而中断

    我编写了一个 Angular 指令 该指令表现出一些奇怪的行为 该指令向 parsers 添加了一个函数 以根据正则表达式模式限制用户输入的内容 如果当前文本与模式不匹配 解析器会将文本恢复为该字段的先前值 因此 当文本恢复时 Angula
  • 特定于平台的 std::chrono::high_resolution_clock::period::num

    我注意到了std chrono high resolution clock period num 1对于我测试过的每个系统 是否存在任何系统 嵌入式 桌面 移动或其他 它恰好是其他数字 在这样的系统上 1 秒不能用刻度来表示 有以下三种实现
  • Chrome 扩展 - 如何使用清单 v3 访问本地 file://

    我有一个 Chrome 扩展程序 可以 如果您允许访问文件 URL 抓取您在 Chrome 中打开的本地 pdf 文件 并将其发送到我们的 API 进行处理 这是通过获取 pdf 来完成的XMLHttpRequest to file Use
  • 时间:2019-03-07 标签:c#thread

    我正在学习有关线程的更多信息 并且我使用以下代码创建了一个相当简单的 WPF 应用程序 x64 平台构建 public partial class MainWindow Window public MainWindow Initialize