写了一个C#scraper。并分析了30K网址的标记,以便从中获取某些指标。
在两台计算机上运行相同的代码:
WorkingSet
大小时,我甚至可以看到GC启动并降低内存使用率,然后再次增长。使用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。