随笔分类 - .NET
摘要:基本概念 哈希表(Hash Table)是一种根据关键字直接访问内存存储位置的数据结构。通过哈希表,数据元素的存放位置和数据元素的关键字之间建立起某种对应关系,建立这种对应关系的函数称为哈希函数(如图)。哈希函数构造方法 哈希表的构造方法是:假设要存储的数据元素个数为n,设置一个长度为m(m≥n)的连续存储单元,分别以每个数据元素的关键字为自变量,通过哈希函数,把映射为内存单元的某个地址,并将该数据元素存储在该内存单元中。 从数学的角度来看,哈希函数实际上是关键字到内存单元的映射,因此我们希望通过哈希函数通过尽量简单的运算使得通过哈希函数计算出的哈希地址尽量均匀地被映射到一系列的内存单元...
阅读全文
摘要:引言 在上一篇文章中,我介绍了动态类型以及它的用途,然后顺便提了一下关于如何使用动态类型来实现一个解决方案,但是都过于空洞,那么就让我们通过本文深入到实际的代码中去看看动态类型的实现和调用。 首先简单回顾一下什么是动态类型,因为有些读者没有阅读过本文的第一部分或者希望跳过上篇文章直接阅读本文。 所谓动态类型,就是运行时在程序内部动态生成的类或者类型。当应用程序启动后,至少会运行一个AppDomain,为了向AppDomain中添加动态类型,首先需要创建动态程序集,顾名思义,动态程序集就是在运行时创建并添加到AppDomain的程序集,它通常不会被保存到文件中,而是单独寄宿于内存中。动态程...
阅读全文
摘要:引言 动态类型(Dynamic Types)可以向框架开发者提供高效的抽象编程模型,而不会产生通常因抽象而导致的性能损失。通过对面向接口编程和工厂设计模式的使用,可以开发一个框架,它既享有抽象编程模型通用的好处,同时也兼具硬编码逻辑的性能优势。 动态类型工厂使用程序基本元数据,确定以最佳的方式在运行时建立新类型。类代码被直接“发出”到内存中的程序集中,无需通过.NET语言特定的编译器编译。类一旦被“发出”,它就已经被CLR“烘烤”好并随时可供应用程序使用了。 这种方式看似只允许我们创建具有硬编码逻辑的类,但其实是非常灵活的,因为你可以发出很多类,只要让所有的类实现相同的接口即可。 通过...
阅读全文
摘要:概述在.NET应用中,导出Excel是很常见的需求,在我维护的一个应用中就遇到到了这样的需求,需要每月定时从不同的Server的不同数据库中获取Excel报表,手动生成实在是非常蛋疼。导出Excel报表大致有以下三种方式:Office PIA,文件流和NPOI开源库,本文只介绍前两种方式。Office PIA.NET开发人员首选的方法,通过COM组件调用Office软件本身来实现文件的创建和读写,但是数据量较大的时候异常缓慢;如下代码所示已经做了优化,将一个二维对象数组赋值到一个单元格区域中(下面的代码中只能用于导出列数不多于26列的数据导出):public static void Expor
阅读全文