У меня есть код автоматизации Excel, который использует COM-объекты Excel. Из других сообщений SO я знаю, что нужно сделать следующее чтобы освободить объекты при первой возможности:
Excel.Range rng = GetSomeRange();
// do something with rng...
Marshal.ReleaseComObject(rng);
Однако, если я перебираю ячейки в диапазоне, правильна ли следующая процедура?
Excel.Range rng = GetSomeRange();
foreach (Excel.Range r in rng)
{
// do something with r
Marshal.ReleaseComObject(r); // release at earliest possible convenience
}
Marshal.ReleaseComObject(rng);
В чем я не уверен, так это в том, что если я выпущу каждый r
в rng
, а затем я также выпущу rng
, я эффективно выпущу rng
дважды или правильно выпуская дополнительные ссылки r
на rng
и сам rng
?
Спасибо за рекламу!
ИЗМЕНИТЬ
Я выбрал последнюю стратегию:
Excel.Range rng = GetSomeRange();
foreach (Excel.Range r in rng)
{
// do something with r
Marshal.ReleaseComObject(r); // release at earliest possible convenience
}
Marshal.ReleaseComObject(rng);
что значительно уменьшило память ...
еще раз - всем спасибо!
r
. См. Этот ответ stackoverflow.com/a/159419/141172 - person Eric J.   schedule 30.04.2015