C#内存使用两台机器之间的差异

时间:2014-07-30 21:54:53

标签: c# performance memory amazon-ec2 garbage-collection

写了一个C#scraper。并分析了30K网址的标记,以便从中获取某些指标。

在两台计算机上运行相同的代码:

  • 我的开发盒包含4个核心CPU,8个逻辑处理器和32GB或RAM 。它最终使用了高达300MB的RAM。当我显示WorkingSet大小时,我甚至可以看到GC启动并降低内存使用率,然后再次增长。
  • 在EC2实例上,相同数据但只有2个处理器和1.7GB RAM 的实例。在这里它使用了1.1GB或RAM,当所有线程完成工作时,它就像我的本地测试一样下降到300MB。

使用Environment.WorkingSet和任务管理器检查RAM使用情况。我的NET速度是不可忽视的,所以我认为它不会影响事情,即使亚马逊实例可能会快一点。 (每个实例的EC2净性能不同,而且这个性能在经济实惠的一面因此较慢。)

  

为什么这个内存会出现差异?我能否以某种方式估计C#中的内存使用情况?

我的猜测是,云中的CPU速度较慢,因此GC更倾向于分配不仅仅是清理已经使用过的内容。但这只是我的理论,可以根据一厢情愿的想法来解释它的意外行为。尽管如此,在我的32GB内存上,它可以使用更多的方式,但它表现得很好。在1.7GB的内存中,使用1.1GB的内容让它变得疯狂......我不明白。

在C ++中,我只想到我同时获取了多少个URL,我想到256KB平均大小+提取数据的大小,我可以预先知道将使用多少内存非常精确。但是这次C#测试让我感到疑惑。

因为我打算在野外发布这个工具......我觉得拿掉一半以上的RAM特别是在较小的机器上感觉很舒服。

更新忘记提及两台计算机都是Windows 8.实际上,一台是8.1(本地)和一台Server 2012(EC2云)都使用.NET 4.5.2。

0 个答案:

没有答案