摘要:
前一阵子更新了系统,鸟枪换炮地装上了WIN7,可是项目却出现了莫名其妙的问题。我这个项目的客户端启动之后会从服务端获取系统时间,然后更新本地时间。但我发现每次启动客户端后,本地时间都会被改为8小时之前。起初我以为是服务器上系统时间错了,也就没管,一直以8小时前的本地时间进行调试。但是当这影响了我的作息时间,导致下班延后给人一种主动加班的表象时,我无法容忍了,决定到服务器上一看究竟。 阅读全文
摘要:
老赵在反对北大青鸟的随笔中提到了数组反转。这的确是一道非常基础的算法题,然而也是一道很不平常的算法题(也许所有的算法深究下去都会很不平常)。因为我写着写着,就写出来8种方法……现在我们以字符串的反转为例,来介绍这几种方法并对它们的性能进行比较。 阅读全文
摘要:
第2章讨论的主要是私有部署(private deployment),即程序集放在应用程序的根目录及其子目录中。以私有方式部署程序集可以在很大程度上控制程序集的命名、版本化和行为。本章将讨论的是可以被多个应用程序共同访问的程序集,全局部署程序集(globally deployed assembly)。
阅读全文
摘要:
用户或管理员可以在很大程度上决定应用程序的执行。例如,管理员可以决定将程序集文件移动到用户硬盘上,或者重写程序集清单中的信息。要对应用程序进行管理控制,可以在程序目录中放置一个配置文件。程序发布者创建该配置文件并打包。此外,机器的管理员或最终用户也可以创建或修改。CLR通过解析该文件的内容来更改定位和加载程序集文件的策略。
阅读全文
摘要:
和版本号一样,程序集还将语言文化作为其标识的一部分。例如,我可能有一个专门用于德语的程序集,一个用于瑞士德语的程序集和一个用于美国英语的程序集。语言文化通过一个包含主标记和次标记的字符串来标识。 阅读全文
摘要:
当AL.exe或CSC.exe生成PE文件程序集时,还在PE文件中内嵌了一个标准的Win32版本资源。用户可以查看文件属性找到该资源。应用程序代码还可以在运行时调用System.Diagnostics.FileVersionInfo的GetVersionInfo静态方法来得到资源信息。 阅读全文
摘要:
一款看上去十分舒服的代码配色,会让Coding过程变得惬意,让编写效率提升不少。而Eclipse默认的代码配色实在丑陋,除了关键字为褐色加粗、字符串为蓝色外,其余颜色均为黑色。在这样的配色中,最难分辨的就是局部变量和类型的私有字段(其他好歹可以通过大小写规则来判断,如果代码编写够规范的话)。而且过于单调的颜色,不容易刺激视觉神经乃至中枢神经,会增加疲劳感,带来困意。为了改变这一现状,我们必须对Eclipse的代码配色进行更改。
阅读全文
摘要:
Visual Studio的智能感知有多强大,只有用过的人才能切身体会。初用Eclipse时,蜗牛一般的响应速度、输入字母和普通字符时对我的无视、以及自动格式化的丑陋,都令我对Visual Studio产生了无限的怀念。其实Eclipse也是一款优秀的IDE,只要随便搜搜,很多问题都是可以轻松解决的。今天我先来解决一下智能感知的问题。
阅读全文
摘要:
本文共三个部分,分别介绍了如何使用Visual Studio IDE为项目添加程序集引用,使用Assembly Linker工具,以及如何在程序集中添加资源文件 阅读全文
摘要:
上一篇随笔中讨论的Program.exe不仅仅是一个包含元数据的PE文件,它还是一个程序集。程序集是一个或多个包含类型定义的文件和资源文件的集合。程序集的某个文件用来保存清单(manifest)。清单是另外一组元数据表的集合,主要包含了程序集中一部分文件的名称。这些元数据表还描述了程序集的版本、语言文化、发布者、公有导出类型和组成程序集的所有文件。 阅读全文
摘要:
C# FAQ最新的随笔中再次提出了使用表达式树访问对象及其成员的问题,这次讨论的是如何获取对象和属性的值。(该博客两个月前曾提出使用表达式树访问对象、类型和成员,我在第一时间进行了翻译) 阅读全文
摘要:
元数据是一个由多个表组成的二进制数据块。表的种类有三种:定义表、引用表和清单(manifest)表。可以通过View—MetaInfo—Show!菜单项(或CTRL+M)以一种可读的方式打开元数据。强烈建议大家体验一下ILDasm。它可以显示大量信息,对这些信息理解得越多,就越能深入理解CLR及其功能。 阅读全文
摘要:
2.1节主要介绍.NET Framework的部署目标。2.2节主要介绍如何将一个包含不同类型的源文件,转换为可部署的文件。 阅读全文
摘要:
.NET Framework提供了大量其他开发平台没有的优势。但是,很少有公司能够下决心重新设计和实现既有代码。微软意识到了这一点,使CLR提供了一种机制,允许应用程序由托管和非托管的部分组成。 阅读全文
摘要:
CLR允许不同语言创建的对象之间能够相互进行通信。换句话说,CLR集成了所有语言,并且允许一种语言创建的对象在另一种完全不同的语言编写的代码中被看做是等同的成员。CLR的标准类型集合、元数据(自描述类型信息)和通用执行环境,使这种集成成为可能。 阅读全文
摘要:
类型是CLR的基本,微软创建了一个正式的规约——通用类型系统(Common Type System,CTS)来描述类型的定义和行为。CTS还指定了类型可见性和访问类型成员的一些规则。CTS建立了以程序集作为类型可见性边界的规则,CLR遵循了这些可见性规则。此外,CTS还定义了管理类型继承、虚拟方法、对象生命周期的规则。设计这些规则的目的是使它们的语义可以用现代编程语言方便地表达出来。 阅读全文
摘要:
FCL中相关的一些类型放置于一个单独的命名空间中。System命名空间中包含Object,integer、character、string、异常处理、控制台I/O、数据类型转换和格式化、生成随机数、执行数学函数等等。所有应用程序都需要使用System命名空间下的类型。 阅读全文
摘要:
NGen.exe工具(本机映像生成器)随.NET Framework一起发布,用来在客户机上安装应用程序时,将IL代码编译为本地代码。由于代码在安装时已经编译了,运行时JIT编译器就无需再次编译,这可以提升程序性能。 阅读全文
摘要:
托管程序集中包含元数据和IL。IL是独立于CPU的机器语言,比大多数CPU机器语言都要高级得多。IL可以访问和操作对象类型,包含创建和初始化对象、调用虚方法和直接操作数组元素、抛出和捕获异常的指令。可以将IL看成是一门面向对象的机器语言。 阅读全文
摘要:
程序集或者是一个可执行的应用程序,或者是一个包含一组类型的DLL,这些类型供可执行的应用程序使用。CLR负责管理包含在这些程序集中的代码的执行。这意味着主机上必须安装.NET Framework。 阅读全文
摘要:
年前的面试经历(二)一文中提出了字符串的内存分配问题,引起园友们的广泛热议。我想程序员应该都是“刨根问底”栏目组的,不把问题刨个稀烂决不罢休。我这里也来简单地讨论一下。 阅读全文
摘要:
实际上,CLR直接打交道的是程序集,而不是模块。程序集是一个抽象的概念,首先,它是一个或多个模块或资源文件的逻辑组合(即程序集由多个模块和资源文件组成)。其次,它是复用、安全、版本的最小单元。根据所选择的编译器和工具的不同,可以生成单一文件或多个文件的程序集。在CLR世界里,程序集就是我们称作组件(component)的东西。 阅读全文
摘要:
CLR顾名思义,是指可被各种不同编程语言使用的运行时。CLR的核心特性可用于所有面向它的编程语言。例如,运行时使用异常来报告错误,那么所有面向运行时的语言都可以通过异常来得到错误报告。又如,运行时也允许创建线程,因此所有面向运行时的语言也都可以创建线程。 阅读全文
摘要:
阅读全文
摘要:
在前不久的一篇随笔中,我们讨论了是否需要手动执行DataContext的Dispose方法,最终的结论是不需要(即没有必要)。那么我们很自然会想到,既然不需要手动Dispose,那么是不是可以只使用一个DataContext而没有必要每次都new一个新的DataContext呢? 阅读全文
摘要:
在上一篇随笔中,我们列举了使用LINQ to SQL对数据库进行更新的5中方案。本文将对这几种方案进行测试和对比,力求找出一个最佳实践。 阅读全文
摘要:
在前一篇文章中,我提出了在使用LINQ to SQL进行更新操作时可能会遇到的几种问题。其实这并不是我一个人遇到的问题,当我在互联网上寻找答案时,我发现很多人都对这个话题发表过类似文章。但另我无法满足的是,他们尽管提出了问题,却没有进行详细的剖析,只给出了解决方案(如添加RowVersion列、去除关联等),但却没有说明为什么必须这么做。这也是我写上篇的初衷,希望通过对LINQ to SQL源代码的分析,来一步一步找出解决问题的办法。本文将对这些方法一一进行讨论。 阅读全文
摘要:
在学习LINQ时,我几乎被一个困难所击倒,这就是你从标题中看到的更新数据库的操作。下面我就一步步带你走入这泥潭,请准备好砖头和口水,Follow me。 阅读全文
摘要:
记录一下SQL中CASE WHEN语句的用法。 阅读全文
摘要:
使用表达式树访问对象的成员,可以避免常规反射方法导致的硬编码问题。 阅读全文