我有一个程序,该程序可以在内存中收集大量数据,并且经过分析后,也会很快将其丢弃。问题是内存消耗越来越高。我想将垃圾收集器设置为更频繁地收集以减少内存量。可能 没有 直接调用gc.collect()
(这是不好的做法)吗?
答案 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()被放到那里是有原因的,就是这样。有时,您对托管堆的状态了解得更多,您可以选择额外的垃圾回收的最佳时机。