【十五分钟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);
        }

    }
}
posted @ 2012-02-27 21:16  陈希章  阅读(3298)  评论(10编辑  收藏  举报