【问题标题】:Requesting memory for your application为您的应用程序请求内存
【发布时间】:2008-11-17 08:36:52
【问题描述】:

我遇到了与this person 类似的问题。主要区别在于该应用程序不适用于开发人员环境,因此我需要知道如何优化 Sql Server 使用的空间(可能基于规格的每台机器)。

我对@9​​87654322@ 的回答很感兴趣,尤其是以下内容:

从 SQL Server 中提取 文档:

最大服务器内存(以 MB 为单位)

指定 SQL Server 可以分配的最大内存量 启动和运行时。这 配置选项可以设置为 如果你知道有具体的价值 多个应用程序运行在 与 SQL Server 相同的时间,并且您想要 保证这些应用程序 有足够的内存运行。如果 这些其他应用程序,例如 Web 或电子邮件服务器,仅请求内存 根据需要,然后不要设置选项, 因为 SQL Server 会释放内存 根据需要给他们。 但是, 应用程序经常使用任何内存 当他们开始和做时可用 如果需要,不要要求更多。如果 在此行为的应用程序 方式在同一台计算机上运行 与 SQL Server 一样,设置 选择一个值,保证 应用程序所需的内存 不是由 SQL Server 分配的。

我的问题是:应用程序如何在需要时从操作系统请求内存?这是编译内置的东西还是开发人员管理的东西?在这台机器上运行的两个主要应用程序是 Sql Server 和我正在开发的(相当重量级的)C# 应用程序,我几乎可以肯定我们在向操作系统请求内存方面没有专门做任何事情。有没有正确/必要的方法来做到这一点?

【问题讨论】:

    标签: c# sql-server-2005 memory-management


    【解决方案1】:

    有些应用程序在启动时会分配大量内存,然后在上面运行自己的内存管理系统。 这对于具有特定分配模式的应用程序非常有用,并且认为它们可以比运行时系统提供的更通用的内存管理器做得更好。

    许多游戏都是这样做的,因为它们通常非常清楚自己的内存使用模式会是什么样子,并且通常会进行大量优化。默认/系统分配器是通用的,并不总是足够快。 Doom did this,并且以它而闻名,当然它的代码是可用的并且被广泛讨论。

    在像 C# 这样的“托管”语言中,我认为这非常罕见,您无需担心。

    【讨论】:

    • 页面不可用:(
    • @MickeyPerlstein 想象一下,仅仅 6 年后,Adobe 就破坏了他们的 URL 方案。太糟糕了。我重写了它,并将链接切换到更酷的东西。感谢您的报告!
    【解决方案2】:

    每次创建新对象时,您都是在请求 .NET 垃圾收集器为您提供内存。如果 GC 在托管堆上没有足够的内存,那么它将向操作系统请求更多。 正如另一个问题所说,尽管 SQL 服务器旨在将内存归还给它,但它似乎并没有做得很好。这里不会有任何硬性规定,您将不得不猜测 SQL Server 的一些设置,然后测试性能。如果您发布一些有关服务器、数据库大小、应用程序似乎需要多少内存的信息,那么我相信人们会很乐意为您提供一些初始配置的建议。 不过有一个警告,我认为更改其内存限制需要重新启动服务。

    【讨论】:

      【解决方案3】:

      这取决于一些因素 - 特别是操作系统和使用的语言。

      例如,在 MacOS Classic 下,启动后不可能分配更多内存 - 我们过去必须使用 Finder 修改分配的内存量,然后重新启动应用程序。那是糟糕的过去。

      现代操作系统将允许正在运行的进程请求更多内存 - 例如在 C 中,您可以使用 alloc()、malloc()、realloc() 或类似方法来请求内存块。在动态语言中,您只需创建对象或变量,并分配更多内存。

      在 java 中,JVM 可以访问多少内存是有限制的——这可以通过重新启动 JVM 并传递一些参数来改变(听起来像是过去的糟糕日子,不是吗? ?)。

      在 Objective-C 中,除了 malloc() 系列函数之外,您还可以在堆上创建对象,使用

      [object alloc]; 
      

      通常被视为

      [[object alloc] init];
      

      请注意,这与在堆栈上创建对象略有不同 - 如果您对编程很认真,了解这两者之间的区别也可能很有用 :)

      总之——程序员需要向操作系统请求更多内存。这可以是隐式的(在动态语言中,通过创建对象,或通过在堆上创建对象)或显式的,例如在 C 中使用 alloc()/malloc()/etc。

      【讨论】:

        猜你喜欢
        • 2013-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多