- 博客(33)
- 收藏
- 关注
原创 编写自己的MSN机器人
概述 现在各类即时通信软件琳琅满目,相信接触过INTERNET的人都会使用过其中的一部分。在中国就目前用户量而言,腾讯公司的QQ、微软公司的MSN Messenger以及网易公司的POPO排名在前三位。不过令人比较遗憾的是,腾讯公司和网易公司对于QQ以及POPO使用的通信协议并没有对外界公开,正是由于这样的技术壁垒,使得一些即时通信的开发者很难在这些用户群中开辟新的客户服务渠道。 不
2004-07-18 14:46:00 3529 2
原创 在.NET中处理事务(1)
负责使交易平稳和可预测的技术称为事务处理。事务确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。事务处理系统由计算机硬件和承载面向事务的应用程序的计算机软件组成,此应用程序执行开展业务所需的例程事务。管理销售订单输入、机票预定、工资单、雇员记录、生产和发货的系统即属于这类系
2002-04-23 09:19:00 1875
原创 在.NET中处理事务(2)
自动事务和 XML Web services [C#]ASP.NET 使用与 Web 窗体一致且相似的编程抽象模型为创建和公开 XML Web services 提供内置支持。结果模型是可伸缩和可扩展的,并接受 HTTP、XML、SOAP、WSDL 开放式 Internet 以及其他标准。XML Web services 支持开放式标准,因此任何客户端或支持 Internet 的设备
2002-04-23 09:18:00 1717
原创 在.NET里的垃圾回收编程
.NET 框架的垃圾回收器管理应用程序的内存分配和释放。每次您使用 new 运算符创建对象时,运行库都从托管堆为该对象分配内存。只要托管堆中有地址空间可用,运行库就会继续为新对象分配空间。但是,内存不是无限大的。最终,垃圾回收器必须执行回收以释放一些内存。垃圾回收器优化引擎根据正在进行的分配情况确定执行回收的最佳时间。当垃圾回收器执行回收时,它检查托管堆中不再被应用程序使用的对象并执行必要的操作来
2002-04-23 09:18:00 1937
原创 使用.NET 异步编程(1)
使用 .NET 异步编程,在程序继续执行的同时对 .NET 类方法进行调用,直到进行指定的回调为止;或者如果没有提供回调,则直到对调用的阻塞、轮询或等待完成为止。例如,一个程序可以调用一个方法,该方法枚举一个较大的列表,同时主程序将继续执行。在完成枚举后,进行回调并且程序对它进行寻址。异步编程是由 .NET 框架的许多区域支持的功能,这些区域包括: 文件 IO、流 IO、套接字 IO
2002-04-22 09:39:00 2979
原创 使用.NET 异步编程(2)
异步委托异步委托提供以异步方式调用同步方法的能力。当同步调用一个委托时,调用方法直接对当前线程调用目标方法。如果编译器支持异步委托,则它将生成该调用方法以及 BeginInvoke 和 EndInvoke 方法。如果调用 BeginInvoke 方法,则公共语言运行库将对请求进行排队并立即返回到调用方。将对来自线程池的线程调用该目标方法。提交请求的原始线程自由地继续与目标方法并行执行,该目标方
2002-04-22 09:39:00 2171 2
原创 在.NET中的线程处理(1)
无论您是为具有单个处理器的计算机还是为具有多个处理器的计算机进行开发,您都希望应用程序为用户提供最好的响应性能,即使应用程序当前正在完成其他工作。要使应用程序能够快速响应用户操作,同时在用户事件之间或者甚至在用户事件期间利用处理器,最强大的方式之一是使用多个执行线程。线程与线程处理操作系统使用进程将它们正在执行的不同应用程序分开。线程是操作系统分配处理器时间的基本单元,并且该进程中可以有多
2002-04-22 09:39:00 2220
原创 在.NET中的线程处理(2)
.NET 框架提供了许多有助于您创建和管理多线程应用程序的对象。WaitHandle 对象可以帮助您响应其他线程执行的操作,尤其是在与非托管代码交互操作时。ThreadPool 为大多数任务提供最佳的基本线程创建和管理机制。Monitor、Mutex、Interlocked 和 ReaderWriterLock 提供用于在较低级别上同步执行的机制。Timer 是一种非常灵活的用来以特定时间间隔引发
2002-04-22 09:39:00 1572
原创 在.NET中的线程处理(3)
使用异步 I/O 完成事件,线程池中的线程将只在收到数据时对数据进行处理,一旦处理完数据,该线程就会返回到线程池中。若要进行异步 I/O 调用,必须将操作系统 I/O 句柄与线程池相关联,并且必须指定一个回调方法。当 I/O 操作完成后,线程池中的线程将调用该回调方法。下面的 C# 代码示例说明了一个简单的异步 I/O 操作。注意 该示例需要 100MB 以上的可用内存。[C#]
2002-04-22 09:38:00 1363
原创 在.NET中的线程处理(4)
Timer [C#]计时器是使您能够指定要在指定时间调用的委托的轻量对象。线程池中的线程执行等待操作。使用 Timer 类是非常简单的。需要创建一个 Timer(通过将 TimerCallback 委托传递到回调方法)、一个表示将被传递给回调的状态的对象、初始引发时间以及表示回调调用之间的时间段的时间。若要取消挂起的计时器,请调用 Timer.Dispose 函数。注意 还有 Sys
2002-04-22 09:38:00 1418
原创 在.NET中的线程处理(5)
Mutex [C#]可以使用 Mutex 对象在线程之间以及跨进程进行同步。虽然 Mutex 不具备 Monitor 类的所有等待和脉冲功能,但它的确提供了创建可在进程之间使用的命名的互斥体的功能。调用 WaitOne、WaitAll 或 WaitAny 可以请求 Mutex 的所属权。如果没有任何线程拥有它,则 Mutex 的状态为已发信号的状态。如果某个线程拥有 Mutex,则该
2002-04-22 09:38:00 1546
原创 在.NET中的线程处理(6)
使用线程和线程处理创建、管理和销毁托管线程是非常容易的,但如果不了解托管线程和非托管线程之间的关系以及 ThreadAbortException,则这样做可能会导致预料不到的副作用。创建线程 [C#]在创建操作系统进程时,操作系统将插入一个线程以执行该进程(包括任何原始应用程序域)中的代码。从此刻起,就可以创建和销毁应用程序域,而不必创建或销毁任何操作系统线程。如果正在执行的代码是托
2002-04-22 09:38:00 3016
原创 在.NET运行时了解类型信息(1)
通过反射命名空间中的类以及 System.Type,您可以获取有关已加载的程序集和在其中定义的类型(如类、接口和值类型)的信息。您也可以使用反射在运行时创建类型实例,然后调用和访问这些实例。反射概述公共语言运行库加载器管理应用程序域。这种管理包括将每个程序集加载到相应的应用程序域以及控制每个程序集中类型层次结构的内存布局。程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装
2002-04-18 09:26:00 1647
原创 使用 .NET的IO(1)
System.IO 命名空间包含允许在数据流和文件上进行同步和异步读取及写入的类型。以下的区别有助于澄清文件和流的差异。文件是一些具有永久存储及特定顺序的字节组成的一个有序的、具有名称的集合。因此,对于文件,人们常会想到目录路径、磁盘存储、文件和目录名等方面。相反,流提供一种向后备存储器写入字节和从后备存储器读取字节的方式,后备存储器可以为多种存储媒介之一。正如除磁盘外存在多种后备存储器一样,
2002-04-18 09:25:00 1539
原创 使用 .NET的IO(2)
向字符串写入字符下面的代码示例把从字符数组中指定位置开始的一定数目的字符写入现有的字符串。使用 StringWriter 完成此操作,如下所示。 [C#]using System;using System.IO;using System.Text; public class CharsToStr{ public static void Main(String[] args) { /
2002-04-18 09:25:00 1383
原创 使用.NET访问 Internet(2)
实现异步请求System.Net 类使用 .NET 框架的标准异步编程模型对 Internet 资源进行异步访问。WebRequest 类的 BeginGetResponse 和 EndGetResponse 方法分别启动和完成对 Internet 资源的异步请求。注意 在异步回调方法中使用同步调用可能会导致严重的性能降低。通过 WebRequest 及其子代实现的 Internet 请求
2002-04-18 09:25:00 1205
原创 使用.NET访问 Internet(3)
使用 TCP 服务TCPClient 类使用 TCP 从 Internet 资源请求数据。TcpClient 的方法和属性提取某个 Socket 实例的创建细节,该实例用于通过 TCP 请求和接收数据。由于到远程设备的连接表示为流,因此可以使用 .NET 框架流处理技术读取和写入数据。TCP 协议建立与远程终结点的连接,然后使用此连接发送和接收数据包。TCP 负责确保将数据包发送到终结点并
2002-04-18 09:25:00 1452
原创 使用.NET访问Internet(4)
使用异步客户端套接字异步客户端套接字在等待网络操作完成时不挂起应用程序。相反,它使用标准 .NET 框架异步编程模型在一个线程上处理网络连接,而应用程序继续在原始线程上运行。异步套接字适用于大量使用网络或不能等待网络操作完成才能继续的应用程序。Socket 类遵循异步方法的 .NET 框架命名模式;例如,同步 Receive 方法对应异步 BeginReceive 和 EndReceive
2002-04-18 09:25:00 1288
原创 使用.NET访问Internet(5)
同步客户端套接字示例下面的示例程序创建一个连接到服务器的客户端。该客户端是用同步套接字生成的,因此挂起客户端应用程序的执行,直到服务器返回响应为止。该应用程序将字符串发送到服务器,然后在控制台显示该服务器返回的字符串。 [C#]using System;using System.Net;using System.Net.Sockets;using System.Text; public cla
2002-04-18 09:25:00 1159
原创 在.NET运行时了解类型信息(2)
反射类所使用的设计模式System.Reflection 类中最常用的方法都使用统一的模式。Module、Type 和 MemberInfo 类的成员使用下表中所示的设计模式。成员签名说明MyInstance[] FindXxx(filter, filterCriteria)查找并返回经过筛选的类型列表,或者在当前类型没有实现任何匹配筛选器的类型
2002-04-17 09:03:00 1061
原创 在.NET运行时了解类型信息(3)
访问自定义属性当属性与程序元素相关联后,可以使用反射来查询它们是否存在以及它们的值。用于查询属性的主要反射方法包含在 System.Reflection.MemberInfo.GetCustomAttributes 和 System.Reflection.Assembly.GetCustomAttributes 中。 自定义属性的可访问性根据附加该属性的程序集来进行检查。这相当于检查附加自
2002-04-17 09:03:00 1007
原创 使用 .NET的IO(3)
独立存储独立存储是一种数据存储机制,它在代码与保存的数据之间定义了标准化的关联方式,从而提供隔离性和安全性。同时,标准化也提供了其他好处。管理员可以使用旨在操作独立存储的工具来配置文件存储空间、设置安全策略及删除未使用的数据。通过独立存储,代码不再需要使用唯一的路径来指定文件系统中的安全位置,同时可以保护数据免遭只具有独立存储访问权限的其他应用程序的损坏。不再需要指示应用程序的存储区域位置的“
2002-04-17 09:02:00 1425
原创 使用 .NET的IO(4)
获得存储区存储区公开数据舱中的虚文件系统。IsolatedStorageFile 提供了许多与存储区进行交互的方法。要创建和检索存储区,IsolatedStorageFile 提供了三种静态方法。调用 GetUserStoreForAssembly 或 GetUserStoreForDomain 分别返回按用户和程序集隔离及按用户、域和程序集隔离的存储。这两种方法检索属于代码块(是从该代码块中
2002-04-17 09:02:00 1295
原创 使用 .NET的IO(5)
查找现有的文件和目录您还可以使用独立存储文件来搜索现有的目录和文件。请记住,在存储区中,文件名和目录名是相对于虚文件系统的根目录指定的。此外,Windows 文件系统中的文件和目录名不区分大小写。要搜索某个目录,请使用 IsolatedStorageFile 的 GetDirectoryNames 实例方法。GetDirectoryNames 采用表示搜索模式的字符串。支持使用单字符 (?
2002-04-17 09:02:00 1029
原创 使用.NET访问 Internet(1)
Microsoft .NET 框架提供 Internet 服务的分层的、可扩展的和托管的实现,您可以将这些 Internet 服务快速而轻松地集成到您的应用程序中。您的应用程序可建立在可插接式协议的基础之上以便自动利用新的 Internet 协议,或者它们可以使用 Windows 套接字接口的托管实现来使用套接字级别上的网络。介绍可插接式协议Microsoft .NET 框架提供分层的、可
2002-04-17 09:02:00 1363
原创 承载.NET公共语言运行库
公共语言运行库支持多种不同的应用程序。例如,运行库可以运行 Web 服务器应用程序和控制台应用程序,以及带有传统的 Windows 用户界面的应用程序。每种应用程序都需要使用一段名为运行库宿主的代码才能启动。运行库宿主会将运行库加载到一个进程中,在该进程中创建应用程序域,然后在这些应用程序域内加载并执行用户代码。宿主概述.NET 框架附带了支持几种常见情况的运行库宿主,其中包括 ASP
2002-04-15 15:04:00 1496
原创 使用 .NET 远程处理访问其他应用程序域中的对象
在运行于不同进程中的对象之间建立通讯(无论是在同一台计算机上,还是在相距数千公里的计算机上)是常见的开发目标,尤其是在生成大范围分布式应用程序的时候。传统上,这需要深入了解相关知识:不仅是关于通讯流任一端的对象的知识,而且还有关于低级别协议的主机、应用程序编程接口以及配置工具或文件的知识。简言之,它是一项需要大量专业知识和经验的复杂任务。.NET 框架提供了几种可用来快速而方便地完成此任
2002-04-15 09:10:00 2119
原创 使用ADO.NET访问数据库
ADO.NET 概述ADO.NET 提供对 Microsoft SQL Server 等数据源以及通过 OLE DB 和 XML 公开的数据源的一致访问。数据共享使用者应用程序可以使用 ADO.NET 来连接到这些数据源,并检索、操作和更新数据。ADO.NET 有效地从数据操作中将数据访问分解为多个可以单独使用或一前一后使用的不连续组件。ADO.NET 包含用于连接到数据库、执行命令和检索
2002-04-15 09:10:00 2993
原创 C++实战之程序书法
可能大家都没有想过这个问题。可能还有人会问,程序怎么还有书法的?不错,程序是有书法的。那就是---程序的版式。版式虽然不影响程序的功能,但是会大大影响程序的可读性和可维护性,程序的版式追求的是清晰、美观,这也是程序版式组成的重要因素。相信大家都写过字,好的书法可以让文章赏心悦目,如行云流水;差的书法则如蛇蝎爬行,索然无味。许多科班出身的程序员对此也是一知半解,请大家一定要好好学习,来弥补
2001-12-12 09:50:00 1858
原创 C++学习要点
1. 传指针时,我们可以通过指针来修改它在外部所指向的内容。但如果要修改外部指针所指向的对象是不可能的。例如传递外部指针到函数内来分配空间,必须传递指针的指针或指针的引用。2. char carry[10] = {0}; 编译器会将其后所有的东西都置0;3. 函数返回值为const时,返回的东西付给一个类型相同的标示后其不能为左值;4. c
2001-11-30 15:51:00 1539
原创 C++实战之数据抽象
C++是一个能提高效率的工具。这就是我们为什么在熟悉了以前的语言以后还要花如此多的时间和经历来学习和使用它的原因。可能我们会在一段时间内是效率降低,但是当我们熟练地掌握了新工具以后,我们将会得到更好的效率。在C++里,唯一能极大地提高工作效率的方法就是使用---库。这也是C++设计的主要目标之一,对C++的数据定义和设计有一定地了解,你对使用库也将会有更深入的认识。首先,你必须知
2001-11-28 14:29:00 1644
原创 C/C++实战之内存管理
欢迎大家来到这片大多数程序员都心有余悸的雷区。本世纪伟大的比尔·盖茨曾经失言:640K ought to be enough for everybody -- Bill Gates 1981相信程序员们都经常要编写一些关于内存分配和使用的程序,而且都有过那种生不如死的感觉(当然我是指那种调试程序的感觉了,可能夸张了些!) 常见的内存分配和使用错误 1)
2001-11-11 21:23:00 1243
原创 C++语言实战技巧(1)
C++语言实战技巧1 序言学习一种程序设计语言的基本原理是一回事,而学习怎么样运用该种语言设计和表写高效、高质量的程序则又是另外一回事了。C++是一种有着非同寻常的功能和表达能力的一种程序语言,只要使用得当,C++能使工作变得乐趣无穷。无论是面向对象的还是常规的软件设计,C++都能直接进行表示并能高效地实现。通过理智慎重的推敲,精心构思的技巧设计一组类(class),
2001-11-04 20:10:00 1379
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人