Tak jsem se v tom nějak vrtal a četl a závěrem je tedy, že musím pro naprosto každou získanou referenci na nějaký COM objekt Marshalem po následné práci snížit počet referencí na ten objekt. Jelikož pracuji s Excelem, tak "jediné" COM objekty, které mne zajímají, jsou Application, Workbooks, Workbook, Worksheet, Sheets a nyní jsem zjistil, že i Range (překvapivě).
Je tento postup tedy správný?:
Worksheet sheet;
Sheets SHEETS;
SHEETS = this.workbook.Worksheets; //rozdělit na SHEETS, protože potom nemůžu udělat: sheet = this.workbook.Worksheets.Add() - kvůli tečkám - ztratím referenci
sheet = SHEETS.Add();
sheet.Name = "September";
Marshal.ReleaseComObject(sheet);
sheet = SHEETS.Add();
sheet.Name = "August";
Marshal.ReleaseComObject(sheet);
sheet = SHEETS.Add();
sheet.Name = "July";
Marshal.ReleaseComObject(sheet);
Marshal.ReleaseComObject(SHEETS);//workbook uvolním až v pozdějším kódu, ten si nechávám stále otevřený
Nebo následovně - ŠPATNĚ:sheet.Range[sheet.Cells[topIndent + 1, leftIndent + 3], sheet.Cells[topIndent + 1, leftIndent + 4]].Merge();
a SPRÁVNĚ:Range TEST;
TEST = sheet.Range[sheet.Cells[topIndent + 1, leftIndent + 3], sheet.Cells[topIndent + 1, leftIndent + 4]];
TEST.Merge();
Marshal.ReleaseComObject(TEST);
Dá se říci, že když takto opravím celý kód, bude vše v pořádku?//EDIT
Ještě mě napadlo, co tedy na každý objekt, s kterým jsem pracoval, ke konci práce zavolat Marshal.FinalReleaseComObject Method?