我正在编写一些设置一些 excel 电子表格的代码。但是我提出了 c# 内存问题。我有一个例程来处理我的垃圾,我基本上使用 COM 对象的互操作版本。
但是,在设置页眉和页脚时,我的记忆中仍然留下了一个 excel 任务,我已将其追踪到此代码。我已经稍微减少了这段代码,我已经将 pagesetup 存储为 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();
}
}