【问题标题】:C# - Application Memory ProblemC# - 应用程序内存问题
【发布时间】:2010-07-31 08:55:04
【问题描述】:

我用 C# 编写了一个小型 WinForm 应用程序。生成的 EXE 为 74 Kb,连同资源和所有大小 179 Kb。但是当我运行它时,根据任务管理器,它需要 9.1 MB 的内存。

所以我的问题是:

  • 为什么会这样?
  • 我可以做些什么来减小它的大小?
  • 如果可以缩小尺寸,可以缩小多少?

【问题讨论】:

    标签: c# winforms optimization memory memory-management


    【解决方案1】:

    首先,使用任务管理器确定内存使用情况充满危险。阅读this article 以更清楚地了解它。

    • 您还引用了哪些其他库?
    • 您将哪些文件加载​​到流中或以其他方式加载?
    • 您通过 P/Invoke 从操作系统请求哪些资源
    • 每个表单加载多少个实例?
    • 您创建了多少个变量,大小是多少?

    例如:

    // Will take up a lot of memory!
    var x = new byte[int.MaxValue];
    

    话虽如此,9.1Mb 并不是很多(在配备 2Gb RAM 的机器上不到内存的 0.5%),更重要的是,您的应用程序使用 9.1Mb 真的很重要吗RAM,还是您在浪费时间进行调查?请记住,您的时间很宝贵。您的最终用户是否愿意将时间花在其他事情上? =)

    【讨论】:

    • 不仅仅是简单的形式。它有一个图片框,根据星期几显示来自本地驱动器的图像。但有一件事我已经设置了透明度键,这样我的图像 (PNG) 没有显示它们的透明区域……就是这样……
    • 感谢这篇文章的帮助......但仍然有办法优化应用程序的内存利用率......而不是通过我可以处理的运行代码......就像构建解决方案时一样那...只是想知道
    • 根据您提供给我们的信息,没有。我建议可能没有必要 =)
    • 软件开发中最难的部分之一是内存分配,尤其是对于复杂的 GUI 应用程序。 C#、其他 .NET 语言和 Java 在虚拟机中都有自己的内存管理器,可以为您处理这些问题。如果您确实需要这种程度的低级控制——请记住,10Mb 不到 2Gb 机器上内存的 0.5%——然后看看你对内存分配有更多控制权的语言,例如 C 或 C++。
    • @Jeremy,来自我的 +1,我希望我能想到将 10Mb 表示为 2Gb 的百分比,它比我的“不是很多”更清楚地理解它= )
    【解决方案2】:

    可执行文件的大小和内存使用量是两个完全不同的概念。例如这个简单的程序:

    class Program
    {
        static void Main()
        {
            var b = new byte[int.MaxValue];
        }
    }
    

    只有 4KB,但它会使用您计算机上的所有可用 RAM 并崩溃。这是为了向您展示您可以拥有一个非常简单的应用程序,但取决于它正在做什么,它可能会消耗大量内存。那么你的应用程序在做什么?

    【讨论】:

      【解决方案3】:

      程序的内存使用量并非 100% 与其二进制文件或资源的大小相关。

      这取决于你的程序做什么。例如,如果您创建这样的内容:

      List<int> list = new List<int>();
      for (i=1; i<100000; i++) list.Add(i);
      

      它将占用存储 int 加上它的对象开销所需的尽可能多的内存。

      这取决于你用过什么。

      您已使用 winforms 标记您的帖子 - 我假设您有一个 gui 应用程序。 Gui 的内存使用取决于使用的控件及其 gui 样式(例如动画、悬停效果......)

      .NET 有一个垃圾收集器,可以在运行时释放未使用的内存。

      【讨论】:

        猜你喜欢
        • 2012-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-06
        • 2013-05-11
        • 2017-01-27
        • 1970-01-01
        • 2010-09-11
        相关资源
        最近更新 更多