Показать сообщение отдельно
Старый 30.01.2014, 22:44   #1
[scaR]
Нуб
Аватар для [scaR]
OFFLINE
Регистрация: 09.03.2012
Возраст: 32
Сообщений: 0
Благодарностей:
29 всего
Мнения: + 548
Репутация: 88

С# GC.WaitForPendingFinalizers()


Решил тут побаловаться с C#.
Вообщем задача создать xlsx файл немалого размера.
Писать самому парсер OpenOffice формата влом, потому нашел в гугле либу для работы с excel SmartXls.
Либа после работы поджирает порядка 400 метров(немаленький такой xlsx - порядка 30 таблиц размера 4000 x 20 в среднем.).Но вот gc отказывался освобождать память после работы( принудительный вызов GC.Collect() не помогал, ссылки на все объекты ручками считал - не было. все disposable объекты вызывали dispose)

В итоге нарыл костыль GC.WaitForPendingFinalizers(). В итоге такая связка:
Код:
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
Высвобождала всю память.

Вопрос таков: в чем мб причина, что память не очищалась нормальным ходом и не слишком ли костыльный выход из такой ситуации?

PS
Просмотреть код либы нет возможности-все закрыто.
 
Ответить с цитированием