WizardWu 編程網

一位台灣的工程師,接觸 .NET 逾十年,近年研究 SQL Server、Performance Tuning、手機應用

博客园 首页 新随笔 联系 订阅 管理

有些软件公司开发的 .NET component 和 control,若开发前未经妥善规划,当您在 Visual Studio 中引用这些 DLL 并按下 F5 键后,说不定要等上一分钟或更久,才能完成整个 solution 的 compile 动作。


在 Java 中,当我们要在程序中引用 class library 的某个 package (即 .NET 的 namespace) 的 class 时,不必整个 package 全部汇入,而可在程序或网页的最上方,直接指定要汇入某一个特定的 class,如下:

// 引用 ArrayList 类
import java.util.ArrayList;

这就是告诉 compiler 说,我想使用 ArrayList 这个 class。当然若我们还想引用 util 内的其它 class,不必逐一宣告,只要以 * 号代表即可:

import java.util.*;


虽然第二种写法在使用上较方便,但却会影响 compile 的时间和性能 [1]。然而在 .NET 中,却只能用第二种写法,无法用第一种;亦即在 .NET 中若只是想引用 ArrayList 这个 class,也无从选择,只能把整个 System.Collections namespace 及其底下的 class 全部汇入您的 project 或网站里,这点不禁令人质疑,为何微软会如此设计,抑或 .NET 在底层有搭配其它的解析机制。

-----------------------------------------------------------

接下来提到在开发 ASP.NET custom control 之前,应先做好哪些规划,而非只是把需要的功能做出来即交差了事,造成其它程序员在引用时的痛苦 (就像本帖一开始谈到的那家软件公司的情况)。

在开发您公司的 custom control library 前,第一步要决定的,是您的多个「自订控件」要编译成单一个 DLL,抑或切割成多个 DLL。

当您在单一个 custom control library project 中,写了多个 custom control (多个 class),他们全部会编译成单一个 DLL,此时若有应用程序要引用其中一个 custom control 时,就会将其它全部的 control 也全部「加载 (load)」。一般会比较推荐这种做法,版工我发现,微软的 Ajax Control (AjaxControlToolkit.dll) 也是采用此种做法。

当然您也可以在每一个 custom control library project 里面,都只放一个 class。如此一来,每一个 custom control 都会被编译成单一个 DLL,这样做的好处是 DLL 的档案比较小,其它 website 或 application 在引用时,加载的速度也会比较快。但有一点千万要记得,载入 DLL 是要代价的,当一个 website 或 application 需要引用三个 class 时,加载三个各有一个 class 的 DLL,会比加载包含三个 class 的单一个 DLL,在性能上要慢得多。


此外还有一点要考虑的,就是 application 在引用这些 custom control 时,在 custom control 所参考到的其它外部 class 也会一并被载入,这也会造成 DLL 的 size 变大,而且 application 在引用时也会较耗 memory、加载时间也较久 (就像本帖一开始谈到的那家软件公司的情况)。

因此若您的 custom control 会参考到的外部 class 都类似或相同,那就比较适合将这些 custom control 编译成同一个 DLL;但若参考到的外部 class 差异性极大,就该考虑切成不同的 DLL,避免 application 在引用此 DLL 时,载入了过多的外部 class 或用不到的 class,而拖累了性能。


此外,您也可以在单一个 .VB 或 .CS 档案里,定义多个 class。这样做虽然可让单一个档案产生多个 custom control,但这样做并不会带来任何性能上的帮助,而且会造成其它人在引用和维护上的困扰。


-----------------------------------------------------------

参考书籍:

[1] Bruce Eckel, "Thinking in Java (2e)", Chapter 2.

[2] Peter Vogel, "Professional Web Parts and Custom Controls with ASP.NET 2.0", Chapter 3.

-----------------------------------------------------------

 

posted on 2008-10-10 22:06  WizardWu  阅读(827)  评论(2编辑  收藏  举报