什么构成良好的记忆档案?

时间:2008-11-15 19:05:20

标签: memory-management tradeoff

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

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

我问,因为我最近在内存使用和性能之间进行了权衡,并想知道是否有任何关于它的普遍共识?

编辑:对于拥有能够运行富互联网应用程序的计算机的用户,平台是Windows XP。

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

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

3 个答案:

答案 0 :(得分:2)

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

以下是需要考虑的一些权衡因素:

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

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

如果必须的话,我通常建议使用更多的RAM来获得更好的速度。但只有当RAM要求对您的目标受众来说是切合实际的时候。例如,如果您希望拥有1GB RAM的家庭用户使用您的程序,那么请不要自己使用600MB RAM。

考虑在此实例中使用更多RAM以获得更好的速度,并优化代码的其他部分以使用更少的RAM。

修改

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

答案 1 :(得分:1)

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

听到一个调查示例,显示在通过Steam玩游戏的人的系统中安装的RAM的分布(来源:Valve - Survey Summary Data):

  • 小于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。

答案 2 :(得分:0)

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