zoukankan      html  css  js  c++  java
  • 如何理解并优化.NET应用程序对内存的使用

    【十五分钟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);
            }
    
        }
    }
    
  • 相关阅读:
    适合新手小白的UI学习路线完整版
    UI设计课程教程分享:Banner的设计和技巧
    UI设计:C4D作品案例分享
    还在凭实力单身吗,那是因为你还没学会这项技术
    PS故障风海报制作技术分享
    你真的了解标签栏设计吗?
    来看看N多设计师笔下的Spider Man
    羡慕女设计师啊,天生色感好!
    43. Multiply Strings
    40. Combination Sum II
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2371020.html
Copyright © 2011-2022 走看看