Хоча я розумію серйозні наслідки гри з цією функцією (або, принаймні, так я вважаю), я не розумію, чому це стає однією з таких речей, якими поважні програмісти ніколи не користуються, навіть ті, хто навіть не знає для чого це.
Скажімо, я розробляю додаток, де використання пам’яті дуже різниться залежно від того, що робить користувач. Життєвий цикл програми можна розділити на два основні етапи: редагування та обробка в режимі реального часу. На етапі редагування припустімо, що створюються мільярди чи навіть трильйони об’єктів; деякі з них невеликі, а деякі - ні, деякі можуть мати фіналізатори, а деякі - ні, і припустимо, їх тривалість життя варіюється від дуже кількох мілісекунд до довгих годин. Далі користувач вирішує перейти на етап реального часу. На даний момент, припустимо, що ефективність відіграє фундаментальну роль і найменша зміна в потоці програми може призвести до катастрофічних наслідків. Створення об'єктів потім зводиться до мінімально можливого за допомогою об’єктних пулів і подібних, але потім, GC несподівано звучить і кидає все, і хтось гине.
Питання: Чи в цьому випадку не було б розумним дзвонити GC.Collect () перед тим, як перейти на другий етап?
Зрештою, ці два етапи ніколи не перетинаються один з одним, і вся оптимізація та статистика, яку можна було б зібрати в GC, тут не дасть користі ...
Примітка. Як дехто з вас зазначав, .NET може бути не найкращою платформою для такого додатка, але це виходить за рамки цього питання. Наміром є уточнення, чи може виклик GC.Collect () покращити загальну поведінку / продуктивність програми чи ні. Ми всі згодні з тим, що обставини, за яких ви зробили б таке, є вкрай рідкісними, але знову ж таки, GC намагається здогадуватися і робить це ідеально добре протягом більшої частини часу, але це все одно про здогадки.
Дякую.