C#设置了更具攻击性的垃圾收集

时间:2018-08-08 12:16:39

标签: c# memory-management garbage-collection

我有一个程序,该程序可以在内存中收集大量数据,并且经过分析后,也会很快将其丢弃。问题是内存消耗越来越高。我想将垃圾收集器设置为更频繁地收集以减少内存量。可能 没有 直接调用gc.collect()(这是不好的做法)吗?

3 个答案:

答案 0 :(得分:0)

如果您经常收集,使用和处置数据,然后为了避免内存消耗不断攀升,而仅使应用程序/系统因GC暂停而停滞,那么您就需要避免所有新分配费用。

为此,应避免使用不可变的数据类型。不用将原始数据存储在类/列表/等中,而是查看是否可以将数据存储在诸如byte []数组之类的东西中,这些数组可以清空并重新使用而无需重新分配。然后,将您的数组包装在读取器中,这些读取器将在分析过程中解析并理解数据。

简而言之,在这种情况下, $colorarray=array("red","green","yellow"); // color array if($categories){ echo '<div class="col-2-3 push-1-6 clearfix">'; foreach($categories as $category) { $colorkey= array_rand($colorarray,1); // get random key $colorval=$colorarray[$colorkey]; // get array value echo '<div class="col-1-3 prod-cat-block clearfix"> '; $image = get_field('featured_image', 'category_'.$category->term_id); $url = get_category_link( $category->term_id ); echo '<a href="' . $url . '"> <img src="' . $image['url'] . '" />'; echo '<div class="slate '.$colorval.'"><h2 class="cat-title ugly white-txt slate-bk">' . $category->name . '</h2></div></a>'; echo '</div>'; } echo '</div>'; } 关键字是您最大的敌人。

答案 1 :(得分:0)

您需要确保您没有任何数据句柄。 这些可以包括:

  • 列表中的包含物
  • 附加到对象的代表或事件
  • 成员变量

代表特别隐秘,因为您没有意识到他们正在阻止数据。

答案 2 :(得分:0)

  

我有一个程序可以收集内存中的大量数据,   经过分析,也很快将其丢弃

GC.Collect()被放到那里是有原因的,就是这样。有时,您对托管堆的状态了解得更多,您可以选择额外的垃圾回收的最佳时机。