0

在设计任何桌面应用程序时,是否有关于应用程序应使用多少内存的一般规则?

对于重量级应用程序,这些应用程序可以很容易理解或至少对其进行分析,例如 Firefox 或 Google Chrome。但是对于较小的实用程序或业务线应用程序,可接受的内存使用量是多少?

我问是因为我最近遇到了内存使用和性能之间的权衡,想知道是否对此有任何普遍共识?

编辑:平台是 Windows XP,适用于机器只能运行富 Internet 应用程序的用户。

我的具体权衡问题是在内存中缓存大量图像。如果可能的话,我希望我的应用程序缓存尽可能多的用户内存允许。我已经这样做了,以便应用程序将缓存到某个最大限制,考虑到目前的内存压力。.

但是什么是一个好的数字?你怎么想出一个?这就是我要问的重点。

4

3 回答 3

2

对此没有绝对的答案。这取决于太多的变量。

以下是一些供考虑的权衡:

  • 您正在为什么设备/平台开发?
  • 您是否希望您的用户将此软件用作其计算机的主要用途(例如,您可能正在开发某种服务器软件)
  • 谁是您的目标受众,家庭用户?高级用户?
  • 您是否对用户将拥有的 RAM 量做出切合实际的期望?
  • 您是否考虑到用户还将在该计算机上使用许多其他软件?

有时你可以吃蛋糕也可以吃。例如,如果您正在读取一个文件并将其写回,您可以逐块读取它,而不是将整个文件读入内存然后将其写出。在这种情况下,您可以使用更好的内存,并且不会降低速度。

如果必须,我通常建议使用更多 RAM 以获得更好的速度。但前提是 RAM 要求对您的目标受众来说是现实的。例如,如果您希望拥有 1GB RAM 的家庭用户使用您的程序,那么您自己就不要使用 600MB RAM。

考虑在这种情况下使用更多 RAM 以获得更好的速度,并优化代码的其他部分以使用更少的 RAM。

编辑:

关于你缓存图片的具体情况。我认为您最好允许用户设置他们希望作为选项执行的缓存量。这样,拥有大量 RAM 的人可以将其设置得更高以获得更好的性能,而拥有少量 RAM 的人可以将其设置得更低。

于 2008-11-15T19:31:29.957 回答
1

这完全取决于您的目标平台,这或多或少是一个业务决策。您需要的内存越多,能够使用您的软件的客户就越少。要问的一些问题:您的客户(或潜在客户)在他们的计算机中安装了多少内存?他们将与您的应用程序同时运行哪些其他应用程序?您的应用程序是假定为专门运行的(如全屏计算机游戏),还是应该主要在后台运行的实用程序,或者经常从其他应用程序切换到它?

Hear 是一项调查的示例,该调查显示了人们通过 Steam 玩游戏的系统中已安装 RAM 的分布情况(来源:Valve - 调查摘要数据):

  • 小于 96 Mb 0.01 %
  • 96 Mb 至 127 Mb 0.01 %
  • 128 Mb 至 255 Mb 0.21 %
  • 256 Mb 至 511 Mb 5.33 %
  • 512 Mb 至 999 Mb 19.81 %
  • 1 Gb 至 1.49 Gb 30.16 %
  • 1.5 Gb 至 1.99 Gb 6.10 %
  • 2.0 Gb 38.37 %

我从我的领域(电脑游戏)的此类调查中得出的一个结论是,我可以合理地预期我们几乎所有的用户都拥有 512 MB 或更多,而绝大多数用户拥有 1 GB 或更多。对于应该独占运行的电脑游戏,这意味着 400 MB 左右的工作集相当安全,几乎不会限制任何人出局,如果它为产品提供了显着的附加值,那么拥有一个工作集可能是有意义的大约 800 MB。

于 2008-11-15T19:29:58.993 回答
0

这取决于您的目标 PC 硬件。如果您的应用程序使用太多内存,那么它会在 windows 页面时变慢。测试!在你的妥协中尝试这两种选择,如果有意义的话,在两者之间尝试一些。在您的用户将使用的典型机器上运行测试,并打开合理数量的其他应用程序。因此,对于大多数人来说,它是 Outlook,可能是 Internet Explorer 的一个或 2 个实例(或您选择的邮件客户端/浏览器)。我在一个组织工作,我的应用程序的使用也可能正在运行一些其他自定义应用程序,因此我们也对那些正在运行的应用程序进行测试。我们发现我们的应用程序使用了过多的内存,并且使切换应用程序变得非常缓慢,因此我们稍微放慢了我们的应用程序以减少其内存使用量。如果您有兴趣,我们的目标硬件最初是 512Mb 机器,因为那是我们常见的标准规格工作站。由于这个应用程序,几台 PC 不得不升级到 1Gb。我们现在已经稍微减少了它的 RAM 使用量,但它是用 VB .NET 编写的,并且使用的大部分内存似乎是框架。PerfMon 说该进程正在使用大约 200Mb(峰值),但托管堆只有大约 2Mb!

于 2008-11-15T19:26:59.623 回答