【十五分鍾Talkshow】如何理解並優化.NET應用程序對內存的使用


前言:十五分鍾Talkshow,是我將利用業余時間開展的一個活動(不定期發布),主要是我選擇某些與技術或者軟件工程方面有關的主題進行講解,每次一個主題,盡可能在15分鍾左右講完。這些演講是免費公開的,允許分發。

 

備注:這次是第一次錄制,本來計划是十五分鍾左右,沒有把握好時間,后期還會在內容編排上面再做一些改進

 

摘要提示:

這是一個關於.NET應用程序中對於內存使用和優化的簡短演講,通過此視頻,你可以了解

  1. }什么是內存問題
  2. }.NET應用程序是如何分配和釋放內存
  3. }深入分析內存使用情況並調優

 

講義地址:

http://www.xizhang.com/fmplan/resources/01/如何理解並優化.NET應用程序對內存的使用.pdf

 

視頻地址:

http://www.tudou.com/programs/view/BhY8Q2icnAY/

 

 

 

 

范例代碼:(代碼可以稍作修改,請自行准備有關的Excel文件,和數據庫)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ClosedXML.Excel;
using System.IO;
using System.Diagnostics;


namespace Console
{
    class Program
    {
        static void Main(string[] args)
        {

            UploadData();
            GC.Collect();
            System.Console.Read();
        }

        private static void UploadData()
        {
            ///該軟件的功能在於,讀取某個文件夾里面一批EXCEL文件里面的數據,並將其插入到數據庫中去
            ///測試用的EXCEL文件有470個,每個文件將要讀取200個左右的單元格數據,根據名稱讀取

            var folder = "d:\\temp\\demo";
            var files = Directory.GetFiles(folder, "*.xlsx");


            //數據庫連接
            var db = new DataModelDataContext();

            //准備一個計時器
            var sw = new Stopwatch();
            sw.Start();

            System.Console.WriteLine("開始工作:" + DateTime.Now.ToString());


            files.ForEach(file =>
            {
                var bk = new XLWorkbook(file);
                var names = bk.NamedRanges;

                var fileName = Path.GetFileNameWithoutExtension(file);
                var code = fileName.Substring(0, 6);
                var year = short.Parse(fileName.Substring(7, 4));
                var month = byte.Parse(fileName.Substring(11, 2));




                names.ForEach(item =>
                {
                    var name = item.Name;
                    var address = item.RefersTo;
                    var sheet = address.Split('!')[0].Replace("'", "");
                    var cell = address.Split('!')[1];
                    var rng = bk.Worksheet(sheet).Range(cell).Cells().FirstOrDefault();
                    var v = !string.IsNullOrEmpty(rng.FormulaA1) ? rng.ValueCached : rng.Value.ToString();
                    //如果是公式的話,則用ValueCached讀取(有可能是空值,即表示當前沒有值,有可能是錯誤,這種情況應該都是以#開頭,#DIV/0!,#N/A,#NAME?,#NUM!,#VALUE,#REF!,#NULL!
                    db.ItemValues.InsertOnSubmit(new ItemValue()
                    {
                        Code = code,
                        Year = year,
                        Month = month,
                        ItemName = name,
                        Value = v
                    });

                });

                db.SubmitChanges();


                bk.Dispose();
                GC.Collect();
                System.Console.WriteLine(file);
            });

            sw.Stop();

            System.Console.WriteLine("結束工作:{0},耗時:{1}秒", DateTime.Now, sw.Elapsed.TotalSeconds);
        }

    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM