如何为页面设置页眉和页脚释放Excel内存

时间:2012-08-07 15:10:45

标签: c# excel memory-management header page-setup

我正在研究一些设置excel Spreadsheets的代码。但是我想出了c#内存问题。我有一个例程,它执行我的垃圾处理,其中我基本上使用COM对象的互操作版本。

然而,在设置页眉和页脚时,我仍然在我的记忆中留下了一个excel任务,我已将其跟踪到此代码。我已经减少了这个代码,我已经将页面设置存储为Excel.Pagesetup,以免引起我在本论坛上许多地方读过的已知Excel TWO DOT RULE的问题。

Excel.Application oXL = null;
Excel.Workbook oWB = null;
Excel.Worksheet nSheet = null;

oXL = new Excel.Application(); 
oXL.Visible = false;

oXL.Workbooks.Add(Missing.Value);
oWB = oXL.Workbooks[1];
oXL.DisplayAlerts = false;
oXL.UserControl = false;

nSheet = oWB.ActiveSheet;

Excel.PageSetup thePageSetup = newSheet.PageSetup;   
oXL.ActiveWindow.View = Excel.XlWindowView.xlPageLayoutView;
thePageSetup.Orientation = Excel.XlPageOrientation.xlPortrait;

thePageSetup.CenterHeader = "CH";
thePageSetup.LeftHeader = "LH";
thePageSetup.LeftFooter = "LF";
thePageSetup.RightFooter = "RF";

thePageSetup.LeftMargin = oXL.CentimetersToPoints(1.8);
thePageSetup.RightMargin = oXL.CentimetersToPoints(1.8);
thePageSetup.TopMargin = oXL.CentimetersToPoints(2.9);
thePageSetup.BottomMargin = oXL.CentimetersToPoints(2.9);
thePageSetup.FooterMargin = oXL.CentimetersToPoints(0.8);
thePageSetup.HeaderMargin = oXL.CentimetersToPoints(0.8);      

nSheet.Name = "FIRST SHEET";
nSheet.Select(Type.Missing);
Release(thePageSetup);

我清除了后续工作表和工作簿的内存,它按预期工作但是当我包含页面设置部分时,内存中仍有一个位置。我有什么想法吗?

编辑: 这是我的发布功能,任何人都感兴趣。 obj通过引用发送,然后被置为null。它似乎适用于其他部分。

   private static void Release(Object obj) 
    {
        try
        {
            while (obj != null)
            {
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(obj);
                obj = null;
            }
        }
        catch
        {

        }
        finally
        {
            GC.Collect();
        }
    } 

0 个答案:

没有答案