1. 数据库访问性能优化 数据库的连接和关闭
访问数据库资源需要创建连接、打开连接和关闭连接几个操作。这些过程需要多 次与数据库交换信息以通过身份验证,比较耗费服务器资源。ASP.NET 中提供了 连接池(Connection Pool)改善打开和关闭数据库对性能的影响。系统将用户的 数据库连接放在连接池中,需要时取出,关闭时收回连接,等待下一次的连接请 求。连接池的大小是有限的,如果在连接池达到最大限度后仍要求创建连接,必 然大大影响性能。因此,在建立数据库连接后只有在真正需要操作时才打开连接, 使用完毕后马上关闭,从而尽量减少数据库连接打开的时间,避免出现超出连接 限制的情况。
使用存储过程 存储过程是存储在服务器上的一组预编译的 SQL 语句,类似于 DOS 系统中的批处 理文件。存储过程具有对数据库立即访问的功能,信息处理极为迅速。使用存储 过程可以避免对命令的多次编译,在执行一次后其执行规划就驻留在高速缓存 中,以后需要时只需直接调用缓存中的二进制代码即可。另外,存储过程在服务 器端运行,独立于 ASP.NET 程序,便于修改,最重要的是它可以减少数据库操作 语句在网络中的传输。
优化查询语句 ASP.NET 中 ADO 连接消耗的资源相当大,SQL 语句运行的时间越长,占用系统资 源的时间也越长。因此,尽量使用优化过的 SQL 语句以减少执行时间。比如,不 在查询语句中包含子查询语句,充分利用索引等。
2. 字符串操作性能优化 使用值类型的 ToString 方法
在连接字符串时,经常使用"+"号直接将数字添加到字符串中。这种方法虽然简 单,也可以得到正确结果,但是由于涉及到不同的数据类型,数字需要通过装箱 操作转化为引用类型才可以添加到字符串中。但是装箱操作对性能影响较大,因 为在进行这类处理时,将在托管堆中分配一个新的对象,原有的值复制到新创建 的对象中。使用值类型的 ToString 方法可以避免装箱操作,从而提高应用程序 性能。
运用 StringBuilder 类
String 类对象是不可改变的,对于 String 对象的重新赋值在本质上是重新创建 了一个 String 对象并将新值赋予该对象,其方法 ToString 对性能的提高并非很 显著。在处理字符串时,最好使用 StringBuilder 类,其.NET 命名空间是 System.Text。该类并非创建新的对象,而是通过 Append,Remove,Insert 等方 法直接对字符串进行操作,通过 ToString 方法返回操作结果。 其定义及操 作语句如下所示:
int num; System.Text.StringBuilder str = new System.Text.StringBuilder(); // 创建字符串 str.Append(num.ToString()); // 添 加 数 值 num Response.Write(str.ToString); //显示操作结果 3. 优化 Web 服务器计算机 和特定应用程序的配置文件以符合您的特定需要
默认情况下,ASP.NET 配置被设置成启用最广泛的功能并尽量适应最常见的方 案。因此,应用程序开发人员可以根据应用程序所使用的功能,优化和更改其中 的某些配置,以提高应用程序的性能。下面的列表是您应该考虑的一些选项。
仅对需要的应用程序启用身份验证。
默认情况下,身份验证模式为 Windows,或集成 NTLM。大多数情况下,对于需 要身份验证的应用程序,最好在 Machine.config 文件中禁用身份验证,并在 Web.config 文件中启用身份验证。根据适当的请求和响应编码设置来配置应用 程序。ASP.NET 默认编码格式为 UTF-8。如果您的应用程序为严格的 ASCII,请 配置应用程序使用 ASCII 以获得稍许的性能提高。
考虑对应用程序禁用 AutoEventWireup。
在 Machine.config 文件中将 AutoEventWireup 属性设置为 false,意味着页 面不将方法名与事件进行匹配和将两者挂钩(例如 Page_Load)。如果页面开发人 员要使用这些事件,需要在基类中重写这些方法(例如,需要为页面加载事件重 写 Page.OnLoad,而不是使用 Page_Load 方法)。如果禁用 AutoEventWireup, 页面将通过将事件连接留给页面作者而不是自动执行它,获得稍许的性能提升。
从请求处理管线中移除不用的模块。
默认情况下,服务器计算机的 Machine.config 文件中 节点的所有功能均保留 为激活。根据应用程序所使用的功能,您可以从请求管线中移除不用的模块以获 得稍许的性能提升。检查每个模块及其功能,并按您的需要自定义它。例如,如 果您在应用程序中不使用会话状态和输出缓存,则可以从 列表中移除它们,以 便请求在不执行其他有意义的处理时,不必执行每个模块的进入和离开代码。
4. 一定要禁用调试模式
在部署生产应用程序或进行任何性能测量之前,始终记住禁用调试模式。如果启 用了调试模式,应用程序的性能可能受到非常大的影响。
5. 对于广泛依赖外部资源的应用程序,请考虑在多处理器计算机上启用网络园 艺
ASP.NET 进程模型帮助启用多处理器计算机上的可缩放性,将工作分发给多个进 程(每个 CPU 一个),并且每个进程都将处理器关系设置为其 CPU。此技术称为网 络园艺。如果应用程序使用较慢的数据库服务器或调用具有外部依赖项的 COM 对象(这里只是提及两种可能性),则为您的应用程序启用网络园艺是有益的。但 是,在决定启用网络园艺之前,您应该测试应用程序在网络园中的执行情况。
6. 只要可能,就缓存数据和页输出
ASP.NET 提供了一些简单的机制,它们会在不需要为每个页请求动态计算页输出 或数据时缓存这些页输出或数据。另外,通过设计要进行缓存的页和数据请求(特
别是在站点中预期将有较大通讯量的区域),可以优化这些页的性能。与 .NET Framework 的任何 Web 窗体功能相比,适当地使用缓存可以更好的提高站点的 性能,有时这种提高是超数量级的。使用 ASP.NET 缓存机制有两点需要注意。 首先,不要缓存太多项。缓存每个项均有开销,特别是在内存使用方面。不要缓 存容易重新计算和很少使用的项。其次,给缓存的项分配的有效期不要太短。很 快到期的项会导致缓存中不必要的周转,并且经常导致更多的代码清除和垃圾回 收工作。若关心此问题,请监视与 ASP.NET Applications 性能对象关联的 Cache Total Turnover Rate 性能计数器。高周转率可能说明存在问题,特别是 当项在到期前被移除时。这也称作内存压力。
7. 选择适合页面或应用程序的数据查看机制
根据您选择在 Web 窗体页显示数据的方式,在便利和性能之间常常存在着重要 的权衡。例如,DataGrid Web 服务器控件可能是一种显示数据的方便快捷的方 法,但就性能而言它的开销常常是最大的。在某些简单的情况下,您通过生成适 当的 HTML 自己呈现数据可能很有效,但是自定义和浏览器定向会很快抵销所获 得的额外功效。Repeater Web 服务器控件是便利和性能的折衷。它高效、可自 定义且可编程。
8. 将 SqlDataReader 类用于快速只进数据游标
SqlDataReader 类提供了一种读取从 SQL Server 数据库检索的只进数据流的 方法。如果当创建 ASP.NET 应用程序时出现允许您使用它的情况,则 SqlDataReader 类提供比 DataSet 类更高的性能。情况之所以这样,是因为 SqlDataReader 使用 SQL Server 的本机网络数据传输格式从数据库连接直接 读取数据。另外,SqlDataReader 类实现 IEnumerable 接口,该接口也允许您 将数据绑定到服务器控件。有关更多信息,请参见 SqlDataReader 类。有关 ASP.NET 如何访问数据的信息,请参见通过 ASP.NET 访问数据。
9. 将 SQL Server 存储过程用于数据访问
在 .NET Framework 提供的所有数据访问方法中,基于 SQL Server 的数据访问 是生成高性能、可缩放 Web 应用程序的推荐选择。使用托管 SQL Server 提供 程序时,可通过使用编译的存储过程而不是特殊查询获得额外的性能提高。
10. 避免单线程单元 (STA) COM 组件
默认情况下,ASP.NET 不允许任何 STA COM 组件在页面内运行。若要运行它们, 必须在 .aspx 文件内将 ASPCompat=true 属性包含在 @ Page 指令中。这样就 将执行用的线程池切换到 STA 线程池,而且使 HttpContext 和其他内置对象可 用于 COM 对象。前者也是一种性能优化,因为它避免了将多线程单元 (MTA) 封 送到 STA 线程的任何调用。使用 STA COM 组件可能大大损害性能,应尽量避免。 若必须使用 STA COM 组件,如在任何 interop 方案中,则应在执行期间进行大 量调用并在每次调用期间发送尽可能多的信息。另外,小心不要在构造页面期间 创建任何 STA COM 组件。例如下面的代码中,在页面构造时将实例化由某个线 程创建的 MySTAComponent,而该线程并不是将运行页面的 STA 线程。这可能对 性能有不利影响,因为要构造页面就必须完成 MTA 和 STA 线程之间的封送处 理。
Dim myComp as new MySTAComponent() Public Sub Page_Load() myComp.Name = "Bob" End Sub
首选机制是推迟对象的创建,直到以后在 STA 线程下执行上述代码,如下面的 例子所示。
Dim myComp Public Sub Page_Load() myComp = new MySTAComponent() myComp.Name = "Bob" End Sub
推荐的做法是在需要时或者在 Page_Load 方法中构造任何 COM 组件和外部资 源。永远不要将任何 STA COM 组件存储在可以由构造它的线程以外的其他线程 访问的共享资源里。这类资源包括像缓存和会话状态这样的资源。即使 STA 线 程调用 STA COM 组件,也只有构造此 STA COM 组件的线程能够实际为该调用服 务,而这要求封送处理对创建者线程的调用。此封送处理可能产生重大的性能损 失和可伸缩性问题。在这种情况下,请研究一下使 COM 组件成为 MTA COM 组件
的可能性,或者更好的办法是迁移代码以使对象成为托管对象。
11. 将调用密集型的 COM 组件迁移到托管代码
.NET Framework 提供了一个简单的方法与传统的 COM 组件进行交互。其优点是 可以在保留现有投资的同时利用新的平台。但是在某些情况下,保留旧组件的性 能开销使得将组件迁移到托管代码是值得的。每一情况都是不一样的,决定是否 需要迁移组件的最好方法是对 Web 站点运行性能测量。建议您研究一下如何将 需要大量调用以进行交互的任何 COM 组件迁移到托管代码。许多情况下不可能 将旧式组件迁移到托管代码,特别是在最初迁移 Web 应用程序时。在这种情况 下,最大的性能障碍之一是将数据从非托管环境封送到托管环境。因此,在交互 操作中,请在任何一端执行尽可能多的任务,然后进行一个大调用而不是一系列 小调用。例如,公共语言运行库中的所有字符串都是 Unicode 的,所以应在调 用托管代码之前将组件中的所有字符串转换成 Unicode 格式。另外,一处理完 任何 COM 对象或本机资源就释放它们。这样,其他请求就能够使用它们,并且 最大限度地减少了因稍后请求垃圾回收器释放它们所引起的性能问题。
12. 在 Visual Basic .NET 或 JScript. 代码中使用早期绑定
以往,开发人员喜欢使用 Visual Basic、VBScript. 和 JScript. 的原因之一 就是它们所谓“无类型”的性质。变量不需要显式类型声明,并能够简单地通过 使用来创建它们。当从一个类型到另一个类型进行分配时,转换将自动执行。不 过,这种便利会大大损害应用程序的性能。Visual Basic 现在通过使用 Option Strict 编译器指令来支持类型安全编程。为了向后兼容,默认情况下,ASP.NET 不启用该选项。但是,为了得到最佳性能,强烈建议在页中启用该选项。若要启 用 Option Strict,请将 Strict 属性包括在 @ Page 指令中,或者,对于用户 控件,请将该属性包括在 @ Control 指令中。下面的示例演示了如何设置该属 性,并进行了四个变量调用以显示使用该属性是如何导致编译器错误的。
JScript. .NET 也支持无类型编程,但它不提供强制早期绑定的编译器指令。若 发生下面任何一种情况,则变量是晚期绑定的:被显式声明为 Object,是无类 型声明的类的字段,是无显式类型声明的专用函数或方法成员,并且无法从其使 用推断出类型。 最后一个差别比较复杂,因为如果 JScript. .NET 编译器 可以根据变量的使用情况推断出类型,它就会进行优化。在下面的示例中,变量 A 是早期绑定的,但变量 B 是晚期绑定的。
var A; var B; A = "Hello"; B = "World"; B = 0; 为了获 得最佳的性能,当声明 JScript. .NET 变量时,请为其分配一个类型。例如, var A : String。
13. 使请求管线内的所有模块尽可能高效
请求管线内的所有模块在每次请求中都有机会被运行。因此,当请求进入和离开 模块时快速地触发代码至关重要,特别是在不使用模块功能的代码路径里。分别 在使用及不使用模块和配置文件时执行吞吐量测试,对确定这些方法的执行速度 非常有用。
14. 使用 HttpServerUtility.Transfer 方法在同一应用程序的页面间重定向
采用 Server.Transfer 语法,在页面中使用该方法可避免不必要的客户端重定 向。 15. 必要时调整应用程序每个辅助进程的线程数
ASP.NET 的请求结构试图在执行请求的线程数和可用资源之间达到一种平衡。已 知一个使用足够 CPU 功率的应用程序,该结构将根据可用于请求的 CPU 功率, 来决定允许同时执行的请求数。这项技术称作线程门控。但是在某些条件下,线 程门控算法不是很有效。通过使用与 ASP.NET Applications 性能对象关联的 Pipeline Instance Count 性能计数器,可以在 PerfMon 中监视线程门控。当 页面调用外部资源,如数据库访问或 XML Web services 请求时,页面请求通常 停止并释放 CPU。如果某个请求正在等待被处理,并且线程池中有一个线程是自 由的,那么这个正在等待的请求将开始被处理。遗憾的是,有时这可能导致 Web 服务器上存在大量同时处理的请求和许多正在等待的线程,而它们对服务器性能 有不利影响。通常,如果门控因子是外部资源的响应时间,则让过多请求等待资 源,对 Web 服务器的吞吐量并无帮助。为缓和这种情况,可以通过更改 Machine.config 配置文件节点的 maxWorkerThreads 和 maxIOThreads 属性, 手动设置进程中的线程数限制。
注意:辅助线程是用来处理 ASP.NET 请求的,而 IO 线程则是用于为来自文件、 数据库或 XML Web services 的数据提供服务的。分配给这些属性的值是进程中
每个 CPU 每类线程的最大数目。对于双处理器计算机,最大数是设置值的两倍。 对于四处理器计算机,最大值是设置值的四倍。无论如何,对于有四个或八个 CPU 的计算机,最好更改默认值。对于有一个或两个处理器的计算机,默认值就可以, 但对于有更多处理器的计算机的性能,进程中有一百或两百个线程则弊大于利。 注意进程中有太多线程往往会降低服务器的速度,因为额外的上下文交换导致操 作系统将 CPU 周期花在维护线程而不是处理请求上。
16. 适当地使用公共语言运行库的垃圾回收器和自动内存管理
小心不要给每个请求分配过多内存,因为这样垃圾回收器将必须更频繁地进行更 多的工作。另外,不要让不必要的指针指向对象,因为它们将使对象保持活动状 态,并且应尽量避免含 Finalize 方法的对象,因为它们在后面会导致更多的工 作。特别是在 Finalize 调用中永远不要释放资源,因为资源在被垃圾回收器回 收之前可能一直消耗着内存。最后这个问题经常会对 Web 服务器环境的性能造 成毁灭性的打击,因为在等待 Finalize 运行时,很容易耗尽某个特定的资源。
17. 如果有大型 Web 应用程序,可考虑执行预批编译
每当发生对目录的第一次请求时都会执行批编译。如果目录中的页面没有被分析 并编译,此功能会成批分析并编译目录中的所有页面,以便更好地利用磁盘和内 存。如果这需要很长时间,则将快速分析并编译单个页面,以便请求能被处理。 此功能带给 ASP.NET 性能上的好处,因为它将许多页面编译为单个程序集。从 已加载的程序集访问一页比每页加载新的程序集要快。批编译的缺点在于:如果 服务器接收到许多对尚未编译的页面的请求,那么当 Web 服务器分析并编译它 们时,性能可能较差。为解决这个问题,可以执行预批编译。为此,只需在应用 程序激活之前向它请求一个页面,无论哪页均可。然后,当用户首次访问您的站 点时,页面及其程序集将已被编译。没有简单的机制可以知道批编译何时发生。 需一直等到 CPU 空闲或者没有更多的编译器进程(例如 csc.exe(C# 编译器)或 vbc.exe(Visual Basic 编译器))启动。还应尽量避免更改应用程序的 \bin 目 录中的程序集。更改页面会导致重新分析和编译该页,而替换 \bin 目录中的程 序集则会导致完全重新批编译该目录。在包含许多页面的大规模站点上,更好的 办法可能是根据计划替换页面或程序集的频繁程度来设计不同的目录结构。不常 更改的页面可以存储在同一目录中并在特定的时间进行预批编译。经常更改的页 面应在它们自己的目录中(每个目录最多几百页)以便快速编译。Web 应用程序可 以包含许多子目录。批编译发生在目录级,而不是应用程序级。
18. 不要依赖代码中的异常
因为异常大大地降低性能,所以您不应该将它们用作控制正常程序流程的方式。 如果有可能检测到代码中可能导致异常的状态,请执行这种操作。不要在处理该 状态之前捕获异常本身。常见的方案包括:检查 null,分配给将分析为数字值 的 String 一个值,或在应用数学运算前检查特定值。下面的示例演示可能导致 异常的代码以及测试是否存在某种状态的代码。两者产生相同的结果。
try { result = 100 / num; } catch (Exception e) { result = 0; } // ...to this. if (num != 0) result = 100 / num; else result = 0;
19. 使用 HttpResponse.Write 方法进行字符串串联
该方法提供非常有效的缓冲和连接服务。但是,如果您正在执行广泛的连接,请 使 用 多 个 Response.Write 调 用 。 下 面 示 例 中 显 示 的 技 术 比 用 对 Response.Write 方法的单个调用连接字符串更快。
Response.Write("a"); Response.Write(myString); Response.Write("b"); Response.Write(myObj.ToString()); Response.Write("c"); Response.Write(myString2); Response.Write("d"); 20. 除非有特殊的原因要关闭缓冲,否则使其保持打开
禁用 Web 窗体页的缓冲会导致大量的性能开销。
21. 只在必要时保存服务器控件视图状态
自动视图状态管理是服务器控件的功能,该功能使服务器控件可以在往返过程上 重新填充它们的属性值(您不需要编写任何代码)。但是,因为服务器控件的视图 状态在隐藏的窗体字段中往返于服务器,所以该功能确实会对性能产生影响。您
应该知道在哪些情况下视图状态会有所帮助,在哪些情况下它影响页的性能。例 如,如果您将服务器控件绑定到每个往返过程上的数据,则将用从数据绑定操作 获得的新值替换保存的视图状态。在这种情况下,禁用视图状态可以节省处理时 间。默认情况下,为所有服务器控件启用视图状态。若要禁用视图状态,请将控 件的 EnableViewState 属性设置为 false,如下面的 DataGrid 服务器控件示 例所示。
您还可以使用 @ Page 指令禁用整个页的视图状态。当您不从页回发到服务器 时,这将十分有用:
注意:@ Control 指令中也支持 EnableViewState 属性,该指令允许您控制是否 为用户控件启用视图状态。若要分析页上服务器控件使用的视图状态的数量,请 (通过将 trace="true" 属性包括在 @ Page 指令中)启用该页的跟踪并查看 Control Hierarchy 表的 Viewstate 列。有关跟踪和如何启用它的信息,请参 见 ASP.NET 跟踪。
22. 避免到服务器的不必要的往返过程
虽然您很可能希望尽量多地使用 Web 窗体页框架的那些节省时间和代码的功 能,但在某些情况下却不宜使用 ASP.NET 服务器控件和回发事件处理。通常, 只有在检索或存储数据时,您才需要启动到服务器的往返过程。多数数据操作可 在这些往返过程间的客户端上进行。例如,从 HTML 窗体验证用户输入经常可在 数据提交到服务器之前在客户端进行。通常,如果不需要将信息传递到服务器以 将其存储在数据库中,那么您不应该编写导致往返过程的代码。如果您开发自定 义服务器控件,请考虑让它们为支持 ECMAScript. 的浏览器呈现客户端代码。 通过以这种方式使用服务器控件,您可以显著地减少信息被不必要的发送到 Web 服务器的次数。
使用 Page.IsPostBack 避免对往返过程执行不必要的处理
如果您编写处理服务器控件回发处理的代码,有时可能需要在首次请求页时执行 其他代码,而不是当用户发送包含在该页中的 HTML 窗体时执行的代码。根据该 页是否是响应服务器控件事件生成的。
使用 Page.IsPostBack 属性有条件地执行代码
例如,下面的代码演示如何创建数据库连接和命令,该命令在首次请求该页时将 数据绑定到 DataGrid 服务器控件。
void Page_Load(Object sender, EventArgs e) { // Set up a connection and command here. if (!Page.IsPostBack) { String query = "select * from Authors where FirstName like '%JUSTIN%'"; myCommand.Fill(ds, "Authors"); myDataGrid.DataBind(); } }
由于每次请求时都执行 Page_Load 事件,上述代码检查 IsPostBack 属性是否 设置为 false。如果是,则执行代码。如果该属性设置为 true,则不执行代码。 注意 如果不运行这种检查,回发页的行为将不更改。Page_Load 事件的代码在 执行服务器控件事件之前执行,但只有服务器控件事件的结果才可能在输出页上 呈现。如果不运行该检查,仍将为 Page_Load 事件和该页上的任何服务器控件 事件执行处理。
23. 当不使用会话状态时禁用它
并不是所有的应用程序或页都需要针对于具体用户的会话状态,您应该对任何不 需要会话状态的应用程序或页禁用会话状态。 若要禁用页的会话状态,请 将 @ Page 指令中的 EnableSessionState 属性设置为 false。例如:
注意:如果页需要访问会话变量,但不打算创建或修改它们,则将@ Page 指令中 的 EnableSessionState 属性设置为 ReadOnly。还可以禁用 XML Web services 方法的会话状态。有关更多信息,请参见使用 ASP.NET 和 XML Web services 客 户端创建的 XML Web services。若要禁用应用程序的会话状态,请在应用程序
Web.config 文件的 sessionstate 配置节中将 mode 属性设置为 off。例如:
24. 仔细选择会话状态提供程序
ASP.NET 为存储应用程序的会话数据提供了三种不同的方法:进程内会话状态、 作为 Windows 服务的进程外会话状态和 SQL Server 数据库中的进程外会话状 态。每种方法都有自己的优点,但进程内会话状态是迄今为止速度最快的解决方 案。如果只在会话状态中存储少量易失数据,则建议您使用进程内提供程序。进 程外解决方案主要用于跨多个处理器或多个计算机缩放应用程序,或者用于服务 器或进程重新启动时不能丢失数据的情况。有关更多信息,请参见 ASP.NET 状 态管理。
25. 不使用不必要的 Server Control
ASP.net 中,大量的服务器端控件方便了程序开发,但也可能带来性能的损失, 因为用户每操作一次服务器端控件,就产生一次与服务器端的往返过程。因此, 非必要,应当少使用 Server Control。
26. ASP.NET 应用程序性能测试
在对 ASP.NET 应用程序进行性能测试之前,应确保应用程序没有错误,而且功能 正确。具体的性能测试可以采用以下工具进行:Web Application Strees Tool (WAS) 是 Microsoft 发 布 的 一 个 免 费 测 试 工 具 , 可 以 从 http://webtool.rte.microsoft.com/上下载。它可以模拟成百上千个用户同时 对 web 应用程序进行访问请求,在服务器上形成流量负载,从而达到测试的目的, 可以生成平均 TTFB、平均 TTLB 等性能汇总报告。Application Center Test (ACT) 是一个测试工具,附带于 Visual Studio.NET 的企业版中,是 Microsoft 正式支 持的 web 应用程序测试工具。它能够直观地生成图表结果,功能比 WAS 多,但不 具备多个客户机同时测试的能力。服务器操作系统"管理工具"中的"性能"计数 器,可以对服务器进行监测以了解应用程序性能。
结论:
对于网站开发人员来说,在编写 ASP.NET 应用程序时注意性能问题,养成良好的 习惯,提高应用程序性能,至少可以推迟必需的硬件升级,降低网站的成本。

ASP.NET中常用的26个优化性能方法的更多相关文章

  1. [ASP.NET]ASP.NET中常用的26个优化性能方法

    1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接池( ...

  2. .NET中26个优化性能方法

    1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接池( ...

  3. ASP.NET中常用的几个李天平开源公共类LTP.Common,Maticsoft.DBUtility,LtpPageControl

    ASP.NET中常用的几个开源公共类: LTP.Common.dll: 通用函数类库     源码下载Maticsoft.DBUtility.dll 数据访问类库组件     源码下载LtpPageC ...

  4. ASP.NET中常用的几个李天平开源公共类LTP.Common,Maticsoft.DBUtility,LtpPageControl (转)

    ASP.NET中常用的几个开源公共类: LTP.Common.dll: 通用函数类库     源码下载Maticsoft.DBUtility.dll 数据访问类库组件     源码下载LtpPageC ...

  5. .NET中常用的几种解析JSON方法

    一.基本概念 json是什么? JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是一种轻量级的数据交换格式,是存储和交换文本信息的语法. ...

  6. iOS中常用的四种数据持久化方法简介

    iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 ...

  7. ASP.NET中重复表格列合并的实现方法(转自脚本之家)

    这几天做一个项目有用到表格显示数据的地方,客户要求重复的数据列需要合并,就总结了一下.NET控件GridView 和 Repeater 关于重复数据合并的方法. 这是合并之前的效果: 合并之后的效果图 ...

  8. js中常用追加元素的几种方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. Javascript中常用事件集合和事件使用方法

    Javascript中常用事件集合和事件使用方法 一.事件绑定 格式: 事件源 . on事件类型=事件处理函数 事件绑定三要素 1.事件源:和谁绑定 2.事件类型:什么事件 3.事件处理函数:触发了要 ...

随机推荐

  1. UIBarButtonSystemItem

    typedefenum { UIBarButtonSystemItemDone, UIBarButtonSystemItemCancel, UIBarButtonSystemItemEdit, UIB ...

  2. 云计算之路-试用Azure:Azure内置的负载均衡是四层的

    当初迁移至阿里云遇到的第一个问题是在程序中通过Request.UserHostAddress得到的是负载均衡(SLB)的内网IP,而不是用户的真实IP.真实IP存储在服务器变量HTTP_X_Forwa ...

  3. Linux中查看jdk安装目录、Linux卸载jdk、rpm命令、rm命令参数

    一.查看jdk安装目录 [root@node001 ~]# whereis java java: /usr/bin/java /usr/local/java #java执行路径 [root@node0 ...

  4. Eclipse中,快捷键使用总结

    (1)Alt+shift+L:new ReadItem().readItems(file);的返回对象是Map<String,String>用这个快捷键有两个效果示例1:输入光标停在new ...

  5. JS动画公式

    // 效果: // Linear:无缓动效果 // Quadratic:二次方的缓动(t^2) // Cubic:三次方的缓动(t^3) // Quartic:四次方的缓动(t^4) // Quint ...

  6. 简单易懂的Dart》 - Dart语言中文简明教程

    转自:https://www.blackglory.me/straightforward-dart/ Dart是Google公司发布的网络编程语言,其诞生的目的是为了让广大C类OOP程序员们克服Jav ...

  7. Github 入门基本操作

    翻译自:https://guides.github.com/activities/hello-world/ 文章概述: 什么是GitHub? 创建一个存储库 创建一个分支 做出承诺 打开拉请求 合并拉 ...

  8. LaTeX数学公式输入

    [置顶 Tips ] 在 WinEdt 中快速添加公式字符而不必手动打出一个个letters~: 即会出现如下 GUI Page Control : ------------------------- ...

  9. C#代码覆盖率 -vsinstr和OpenCover

    最近接触的项目涉及到C#开发的应用,测试过程中我们需要去分析C#的代码覆盖率,问了一些人,在网上也搜了一些,零碎的找到很多资料,但是都不是很完整,实际使用的过程中还是走了不少弯路.到现在为止,有两种可 ...

  10. DataURL与File,Blob,canvas对象之间的互相转换的Javascript (未完)

    canvas转换为dataURL (从canvas获取dataURL) var dataurl = canvas.toDataURL('image/png'); var dataurl2 = canv ...