0

私はいくつかの Excel スプレッドシートを設定するコードに取り組んでいます。ただし、C# のメモリの問題が発生しました。基本的に COM オブジェクトの相互運用リリースを使用するガベージ処理を行うルーチンがあります。

ただし、ヘッダーとフッターを設定するときに、記憶にまだ Excel タスクが残っているため、このコードまで追跡しました。私はこのコードを少し削減しました。このフォーラムの多くの場所で読んだ既知の Excel TWO DOT RULE で問題が発生しないように、pagesetup を Excel.Pagesetup として保存しました。

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();
        }
    } 
4

0 に答える 0