自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 资源 (36)
  • 收藏
  • 关注

转载 C#自定义消息与MFC对比

在C#中采用的是事件驱动方式,但在我们使用的过程中,有时候通过调用系统原有的消息,处理起来会比较简单一些,特别是在处理与DLL文件的交互时,的确是非常的方便。   在C#中使用自定义消息    在C#中使用自定义消息非常简单,只需要下面几个简单的步骤就可以了: 1、  定义消息 定义消息的方法和VC中定义消息有一点点不同 比如在VC中申明一个自定义消息: #define

2012-11-30 09:11:50 861

转载 调用不是本线程创建的windows控件会报错

应该使用控件的InvokeRequired属性来判断是否需要Invoke,如果是则使用控件Invoke的方法来执行一个委托.类似如下:    public partial class Form1 : Form    {        private delegate void myDel();        public Form1()        {

2012-11-26 11:33:13 485

转载 c#实现多线程代码例子

相信大家都有用过网际快车等下载资源的经历,它里面是可以设置线程数的(近年版本默认是10,曾经默认是5)。它会将文件分成与线程数相同的部分,然后每个线程下载自己的那一部分,这样下载效率就有可能提高。相信大家都有加多线程数,提升下载效率的经历。但细心的用户会发现,在带宽一定的情况下,并不是线程越多,速度越快,而是在某一点达到峰值。在C#中用多线程并不难实现。它有一个命名空间:System.Thre

2012-11-26 11:11:42 618

转载 线程池概述

到目前为止我们使用多线程应用程序的目的是尽可能多地使用计算机处理器资源。所以,看起来我们仅需要为每个独立的任务分配一个不同的线程,并让处理器确定在任何时间它总会处理其中的某一个任务。额,对小系统来说这样做很好。但是当系统越来越复杂时,线程的数量也会越来越多,操作系统将会花费更多时间处理锁分配,理清线程之间的关系,处理程序指令的时间实际上是很少的。为了让我们的程序具备可扩展性,我们将不得不对线程进行

2012-11-26 10:43:30 424

转载 设计多线程应用程序

一个多线程程序有多于两个线程,它可以通过并发实现重要性能提升,不管是否并发执行线程。线程并发执行意味着多于两个线程在同一时间执行。并发是指>=2个线程在>=2个处理器中同步执行。在这部分,我们将探讨设计多线程应用时的考量和问题。在你开发应用程序之前,你应该问问你自己以下问题:  1. 把程序分成小块来运行在不同线程上是否可行?  2. 如果可以将一个线程分成小块,那么该如何进行拆分呢?

2012-11-26 10:18:22 547

转载 com组件和一般dll的区别

这阵子在想一个需要利用com组件的小程序怎么做,突然想起上次去面试的时候考官问过autocad开发时为什么要利用com,而不采用一般的dll?用com来写程序要比普通的dll麻烦一些,但是带来的好处也大很多,尤其是在开发像autocad这样大型软件的时候,需要跨区域来协同工作。“学习COM,首先要知道COM的目的是什么,它解决了一个什么样的问题,在此基础上,MS提供了各式各样的可扩展的COM服务,

2012-11-26 09:55:10 841

转载 线程间操作无效,从不是创建控件的线程访问它

访问 Windows 窗体控件本质上不是线程安全的。如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的 bug,包括争用情况和死锁。确保以线程安全方式访问控件非常重要。.NET Framework 有助于在以非线程安全方式访问控件时检测到这一问题。在调试器中运行应用程序时,如果创建某控件的线程之外的其他线程试图调用该控件,则调试器

2012-11-22 20:20:10 642

转载 C#使用线程Monitor.Enter()和Monitor.Exit()

2012-02-03 17:03 by DanielWise,Monitor 方法是静态的,不需要生成Monitor 类的实例就可以直接调用它们。在.NET Framework 中,每个对象都有一个与之关联的锁,对象可以得到并释放它以便于在任意时间只有一个线程可以访问对象实例变量和方法。类似的,.NET Framework 中的每个对象都提供一个允许自己进入等待状态的机制。与锁的机制类

2012-11-21 16:28:18 14810

转载 需求分析概述

尽量把客户所持的假设解释清楚,特别是那些发生冲突的部分。从字里行间去理解以明确客户没有表达清楚但又想加入的特性或特征。Gause 和Weinberg(1989)提出使用“上下文无关问题”—这是一个高层次的问题,它可以获取业务问题和可能的解决方案的全部信息。客户对这些问题的回答诸如“产品要求怎样的精确度”或“你能帮我解释一下你为什么不同意某人的回答吗?”这些回答可以更直接地认识问题,而这是封闭(cl

2012-11-20 10:02:46 908

转载 Visual C解开特洛伊木马的隐藏面纱

http://www.sina.com.cn 2005年06月14日 08:53 天极yesky   作者: 青岛研究所郎锐   摘要:本文针对于黑软隐藏程序的技术对其基本原理和多种实现方法做了较为深入的剖析。  关键字:黑客软件、隐藏程序、Visual C++   一、引言  “特洛伊木马”曾在网上造成很大恐慌,此类黑客程序通过欺骗手段

2012-11-17 11:27:11 1025

转载 .Net线程问题解答

怎样创建一个线程 受托管的线程与 Windows线程 前台线程与后台线程 名为BeginXXX和EndXXX的方法是做什么用的 异步和多线程有什么关联 WinForm多线程编程篇我的多线程WinForm程序老是抛出InvalidOperationException ,怎么解决?Invoke,BeginInvoke干什么用的,内部是怎么实现的每个线程都有消息队列吗? 为什

2012-11-16 21:05:43 531

转载 多线程编程笔记(五)

]处理周期事件1、System.WinForms.TimerTimer的Tick事件代码:Interlocked.Increment(ref _count);2、ThreadPoolA.生成WaitOrTimerCallback事例B.生成一个同步对象C.添加到线程池例1:/*RegisterWaitForSingleObject下面的示例演

2012-11-16 19:51:07 479

转载 多线程编程笔记(三)

互斥1、Monitor.Enter和Monitor.ExitMonitor 类通过向单个线程授予对象锁来控制对对象的访问。对象锁提供限制访问代码块(通常称为临界区)的能力。当一个线程拥有对象的锁时,其他任何线程都不能获取该锁。还可以使用 Monitor 来确保不会允许其他任何线程访问正在由锁的所有者执行的应用程序代码节,除非另一个线程正在使用其他的锁定对象执行该代码。注意:使用 Mon

2012-11-16 19:48:15 427

转载 多线程编程笔记(二)

线程池用线程池编写多线程应用一般步骤:1、编写工作任务:将所有的工作任务泛放在一个符合WaitCallback接口的函数中  public static void MyAsyncOperation(object state)  {   //...   //要完成的工作任务  }  一般通过state传入一个同步对象2、往线程池中添加工作项 ThreadPoo

2012-11-16 19:46:59 436

转载 多线程编程笔记(一)

操作线程1、操作实例using System;using System.Threading;namespace AppThreadDemo{ class App {  static public void threadMethod()  {    Console.WriteLine("\n执行ThreadMethod的线程的代码为:{0}",Thread.C

2012-11-16 19:45:05 587

转载 .NET多线程编程(4):线程池和异步编程

如果你仔细阅读了我前面的三篇文章,我相信你对用.NET Framework提供的System.Threading.Thread类和一些线程同步的类基本的线程知识和多线程编程知识很了解。我们将在这里进一步讨论一些.NET类,以及他们在多线程编程中扮演的角色和怎么编程。它们是:System.Threading.ThreadPool 类System.Threading.Timer 类如果线程

2012-11-16 19:43:14 688

转载 .NET多线程编程(3):线程同步

随着对多线程学习的深入,你可能觉得需要了解一些有关线程共享资源的问题. .NET framework提供了很多的类和数据类型来控制对共享资源的访问。考虑一种我们经常遇到的情况:有一些全局变量和共享的类变量,我们需要从不同的线程来更新它们,可以通过使用System.Threading.Interlocked类完成这样的任务,它提供了原子的,非模块化的整数更新操作。还有你可以使用System.

2012-11-16 19:40:04 470

转载 死锁,生产者与消费者

// DeadLockSample.cs// 分析一下为什么会发生死锁?using System;using System.Threading;public class Test{ static readonly object firstLock = new object(); static readonly object secondLock = ne

2012-11-16 19:37:53 830

转载 线程内部是如何进行的?

来源:csdn  作者: 看一下以下两个例子的运行结果://TestThread.csusing System;using System.Threading;public class Test{ static int count=0; static void Main() { ThreadS

2012-11-16 19:35:59 444

转载 线程中的参数传递

使用类、类的方法或类的属性都可以向线程传递参数:public class UrlDownloader{ string url; public UrlDownloader (string url) { this.url = url; } public void Download() { W

2012-11-16 19:34:30 492

转载 .NET多线程编程(2):System.Threading.Thread类

在接下来的这篇文章中,我将向大家介绍.NET中的线程API,怎么样用C#创建线程,启动和停止线程,设置优先级和状态.  在.NET中编写的程序将被自动的分配一个线程.让我们来看看用C#编程语言创建线程并且继续学习线程的知识。我们都知道.NET的运行时环境的主线程由Main ()方法来启动应用程序,而且.NET的编译语言有自动的垃圾收集功能,这个垃圾收集发生在另外一个线程里面,所有的这些都是

2012-11-16 19:30:29 723

转载 .NET多线程编程(1):多任务和多线程

在.NET多线程编程这个系列我们讲一起来探讨多线程编程的各个方面。首先我将在本篇文章的开始向大家介绍多线程的有关概念以及多线程编程的基础知识;在接下来的文章中,我将逐一讲述。NET平台上多线程编程的知识,诸如System.Threading命名空间的重要类以及方法,并就一些例子程序来作说明。 引言 早期的计算硬件十分复杂,但是操作系统执行的功能确十分的简单。那个时候的操作系统在任一

2012-11-16 19:27:21 1055

转载 C#目录与文件总结

注:C#的文件操作都是包含在System.Io的命名空间里面。一、 Path类:对一个路径做相应操作,包括文件路径,目录路径。通常会用到Path这个类。1.更改路径字符串的扩展名Public  static  string  ChangeExtension(string  path,string  extension)参数:path(String):要修改的路径信息.

2012-11-11 12:32:58 607

转载 FileInfo与DirectoryInfo

前篇写了 File类与Directory类,今天写 他的 实例类,嘿嘿先上张图: 附上 静态类与实例类的区别:Fileinfo类与DirectoryInfo类//文件File类是静态类,而FileInfo没有静态方法的。File类的静态方法在调用时要执行安全检查。对于操作单一的文件,用静态方法快,但是如果对对象多种操作,用实例化方法,静态方法会每次都寻找文件,而

2012-11-11 12:31:32 666

转载 C#和VB2005初学者如何使用FileSystemInfo类

Class in C# and VB.NET for beginnersFileSystemInfo ClassOne of the rich experiences in working with .NET is a huge collection of Base Class Libraries. The .NET Framework class library is a lib

2012-11-09 08:49:34 848

转载 C#打包应用程序(安装程序)

声明:软件平台:VisualStudio2005中文版(在03下操作雷同).1:新建安装部署项目打开VS,点击新建项目,选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点击确定.(详细见下图)2:安装向导关闭后打开安装向导,点击下一步,或者直接点击完成.如下图:3:开始制作安装向导完成后即可进入项目文件夹:

2012-11-08 16:44:59 513

转载 用C#获取浏览文件夹对话框

摘要: C#里面有选择文件的对话框控件,却没有选择文件夹的对话框控件,我们可以用C#的FolderNameEditor类的子类FolderBrowser类来实现获取浏览文件夹对话框的功能。 下面来看看具体是怎么实现的。 首先新建一个winform的项 ... C#里面有选择文件的对话框控件,却没有选择文件夹的对话框控件,我们可以用C#的FolderNameE

2012-11-08 13:31:09 660

转载 C#多线程编程

一.多线程的概念 Windows是一个多任务的系统,如果你使用的是windows 2000及其以上版本,你可以通过任务管理器查看当前系统运行的程序和进程。什么是进程呢?当一个程序开始运行时,它就是一个进程,进程所指包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的,线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共

2012-11-08 13:26:32 716

转载 C#中时间和委托的例子

C#中事件和委托的例子[日期:2010-11-22]  来源:25175  作者:tongbo  阅读:156 次  [字体:大中小]powered by 25175.net    public partial class Form1 : Form{public Form1(){InitializeComponent();}priva

2012-11-04 10:45:13 526

转载 win32经验总结

转:win32经验总结觉得写那些读书笔记太久,太烦,里面有价值的东西不明显,如果把关键点总结的话,应该会更有利用价值。一 窗口和消息1 前缀前缀 全称 释义 CS class style 类风格选项 CW create windows 创建窗口选项 DT draw text 绘制文本选项 I

2012-11-04 10:21:03 1617

转载 UML类图

类图用于显示类,接口以及它们之间的静态结构和关系的图。通过定义我们可以了解到类图分为两个方面一是类,接口的静态结构,二是他们之间的静态关系。      首先我们必须先了解类或接口的静态结构,这样才可以去理解他们之间的关联。而一个类图可以分为五个层次来说明类的静态结构(接口少于5层,一般只有3层):      类图的第一层是类名。当一个类名使用正体字时,说明该类可以创建实例。反之,说明这个类

2012-11-03 19:04:29 571

转载 封装

一:封装的概念可以把程序按某种规则分成很多“块“,块与块之间可能会有联系,每个块都有一个可变部分和一个稳定的部分。我们需要把可变的部分和稳定的部分分离出来,将稳定的部分 暴露给其他块,而将可变的部分隐藏起来,以便于随时可以让它修改。这项工作就是封装.二:封装的好处其一: 使用者只需要了解如何通过类的接口使用类,而不用关心类的内部数据结构和数据组织方法。 其二:高内聚

2012-11-03 18:44:03 386

转载 委托

回调(callback)函数是Windows编程的一个重要部分。如果您具备C或C++编程背景,就曾在许多Windows API中使用过回调。VB添加了AddressOf关键字后,开发人员就可以利用以前一度受到限制的API了。回调函数实际上是方法调用的指针,也称为函数指针,是一个非常强大的编程特性。.NET以委托的形式实现了函数指针的概念。它们的特殊之处是,与C函数指针不同,.NET委托是类型安全的

2012-11-03 16:58:11 296

转载 C#委托与事件*

在C# 中,委托类似于C++中的回调机制,声明一个委托类型,可以分别采用实例方法和静态方法实例化了委托,所不同的是采用静态方法实例化的委托,它的Target属性为null;而用实例方法实例化的委托,它的Target属性为该实例。但是这里要注意,如果你用Console.WriterLine(delegateObj.Target)输出该实例,结果是该实例的类型,而不是该实例的名字。

2012-11-03 14:52:18 421

转载 .NET设计模式:简单工厂模式

最近一直在看设计模式,想把自己的学习笔记与大家分享一下,如果能帮助大家的话,我会非常高兴,同时也欢迎大家指出里面的不足。园子里其实关于此类文章已经很多了,如果dudu感觉放在首页欠妥的话,可以调一下。简单工厂模式(Simple Factory Pattern)介绍:简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些。因为它至少不是Gof23种设计模式之一。但它在实际的

2012-11-02 19:25:10 563

转载 6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱

引言  本篇文章主要介绍.NET中6个重要的概念:栈,堆,值类型,引用类型,装箱,拆箱。文章开始介绍当你声明一个变量时,编译器内部发生了什么,然后介绍两个重要的概念:栈和堆;最后介绍值类型和引用类型,并说明一些有关它们的重要原理。  最后通过一个简单的示例代码说明装箱拆箱带来的性能损耗。 声明变量的内部机制  在.NET程序中,当你声明一个变量,将在内存中分配一块内存。这块

2012-11-02 11:35:02 678

转载 C#中被委托的方法必须是静态的吗?

静态方法与实例方法的区别:静态方法都是通过关键字static来定义的,静态方法不需要实例这个对象就可以通过类名来访问这个对象。在静态方法中不能直接访问类中的非静态成员。而用实例方法则需要通过具体的实例对象来调用,并且可以访问实例对象中的任何成员。如果用委托绑定实例方法的话需要用实例对象来访问,所以我们在绑定实例方法到委托的时候必须同时让委托得到实例对象的信息,这样才能在委托被回调的时候成功

2012-11-02 11:03:36 9142

转载 C#中的static关键字

静态分配的,有两种情况: 1. 用在类里的属性、方法前面,这样的静态属性与方法不需要创建实例就能访问, 通过类名或对象名都能访问它,静态属性、方法只有“一份”:即如果一个类新建有N个 对象,这N 个对象只有同一个静态属性与方法;2. 方法内部的静态变量: 方法内部的静态变量,执行完静态变量值不消失,再次执行此对象的方法时,值仍存在, 它不是在栈中分配的,是在静态区分析的, 这是与局部变量最

2012-11-02 10:04:56 612

Origin绘制热图(数据及.opj文件)

博客《origion绘制热图》对应数据及结果http://blog.csdn.net/suncherrydream/article/details/75731408

2017-07-22

Origin导入多个文件(数据及效果opj文件)

博客《Origin将多个文件数据导入》对应的数据及结果 http://blog.csdn.net/suncherrydream/article/details/75736339

2017-07-22

java数据结构和算法电子书配套代码及算法动画演示

(美)Robert Lafore著 简介:国外经典计算机科学教材:本书是一本有关计算机编程中所应用的数据结构和算法的书,以针对C++和Java这两种语言的主要差别的描述、集中讨论的数组问题为基础,循序渐进地介绍了简单排序、栈和队列等方面内容。

2017-05-17

利用python绘制热图、计算网络节点degree、kshell、介数中心性、接近中心性、特征向量中心性、PageRank,计算相关性含环境、代码、数据源

利用python绘制热图、计算网络节点degree、kshell、介数中心性、接近中心性、特征向量中心性、PageRank,计算相关性含环境、代码、数据源

2017-05-12

UCINET教程

英文文档,较全面

2017-04-11

ucinet6中文版 下载

UCINET网络分析集成软件包括一维与二维数据分析的NetDraw,还有正在发展应用的三维展示分析软件Mage等,同时集成了Pajek用于大型网络分析的Free应用软件程序。利用UCINET软件可以读取文本文件、KrackPlot、Pajek、Negopy、VNA等格式的文件。它能处理32 767个网络节点。当然, 从实际操作来看,当节点数在5000~10000之间时,一些程序的运行就会很慢。 社会网络分析法包括中心性分析、子群分析、角色分析和基于置换的统计分析等。 另外,该软件包有很强的矩阵分析功能,如矩阵代数和多元统计分析。它是目前最流行的,也是最容易上手、最适合新手的社会网络分析软件。

2017-03-17

整体网分析讲义 UCINET软件实用指南

《整体网分析讲义:UCINET软件实用指南》全书共分12个章节,全面介绍了社会网分析的重要内容——整体网分析,以及如何使用UCINET软件实施测量。具体内容包括社会网络分析简介、整体网研究概要、凝聚子群研究、社会网络的关联性、结构洞与中间人等。该书可供各大专院校作为教材使用,也可供从事相关工作的人员作为参考用书使用。 社会网络分析被认为是与理性选择学派、新制度理论学派并举的重要学派,在管理学、社会学等领域有很大影响,而国内相关论著比较少。《整体网分析讲义:UCINET软件实用指南》梳理了大量国内、国外研究成果,全面介绍了社会网分析的重要内容——整体网分析,以及如何使用UCINET软件实施测量。《整体网分析讲义:UCINET软件实用指南》最大的特点是全面、详尽、实用,是读者使用UCINET软件进行整体网分析的得力助手。 作者简介

2017-03-17

jython-installer-2.7-b1.jar

java调用python,解决了jython2.7中出现的问题,即Cannot create PyString with non-byte value

2016-12-30

NetworkX环境搭建需要安装包

包括: matplotlib-1.1.0.win32-py2.7.exe networkx-1.11-py2.7.egg numpy-1.6.1-win32-superpack-python2.7.exe python-2.7.11.msi pywin32-214.win32-py2.7.exe python2.7版本安装networkx步骤.docx

2016-11-19

Python基础教程(第2版)

《Python基础教程(第2版)》包括Python程序设计的方方面面,首先从Python的安装开始,随后介绍了Python的基础知识和基本概念,包括列表、元组、字符串、字典以及各种语句。然后循序渐进地介绍了一些相对高级的主题,包括抽象、异常、魔法方法、属性、迭代器。此后探讨了如何将Python与数据库、网络、C语言等工具结合使用,从而发挥出Python的强大功能,同时介绍了Python程序测试、打包、发布等知识。最后,作者结合前面讲述的内容,按照实际项目开发的步骤向读者介绍了几个具有实际意义的Python项目的开发过程。 《Python基础教程(第2版)》内容涉及的范围较广,既能为初学者夯实基础,又能帮助程序员提升技能,适合各个层次的Python开发人员阅读参考。 《Python基础教程(第2版)》是经典教程的全新改版.作者根据Python版本的种种变化,全面改写了书中内容,做到既能“瞻前”也能“顾后”。《Python基础教程(第2版)》层次鲜明、结构严谨、内容翔实,特别是在最后几章。作者将前面讲述的内容应用到了10个引人入胜的项目中,并以模板的形式介绍了项目的开发过程。《Python基础教程(第2版)》既适合初学者夯实基础。又能帮助Python程序员提升技能,即使是Python方面的技术专家,也能从书里找到令你耳目一新的东西。

2016-07-06

《The C++ Programming Language》中文版+英文版

The C++ Programming Language 中文英版 C++必备经典书籍

2016-07-06

《Complex social contagion makes networks more vulnerable to disease outbreaks》

社会网络被广泛的应用于人与人之间传染病的动态传播。疫苗干扰了疾病在网络中的传播过程。确实,足够高的疫苗接种率在很大程度上能够有效地阻止疾病在网络中传播。我们有越来越多的证据表明,健康的行为需要社会强化。健康行为可以通过复杂的传染过程在社会网络中传播,如接种疫苗,拒绝方法等。通过对健康行为和传染病传播过程仿真建模,我们发现,在其他条件相同的前提下,健康行为的传播过程对疾病传播动力学有很大的影响。动力学产生变化的原因在于,含易感人群的拓扑结构的不同,易感染群在健康行为传播的过程中产生;反过来,健康行为的传播又依赖于整个社会网络的拓扑结构。我们的发现指出:健康行为在预测和控制疾病爆发中的重要性。

2016-03-25

统计建模与R软件

书中结合数理统计问题对R软件进行科学、准确和全面的介绍,以便使读者能深刻理解该软件的精髓和灵活、高效的使用技巧.此外,还介绍了在工程技术、经济管理、社会生活等各方面的丰富的统计问题及其统计建模方法,通过该软件将所建模型进行求解,使读者获得从实际问题建模入手,到利用软件进行求解,以及对计算结果进行分析的全面训练.

2016-03-17

Taobao oceanbase代码

//供学习用,禁止用于商业用途。 2012.04.20   OceanBase解决什么问题   许多公司的核心资产是各种各样的商业数据,例如淘宝的商品、交易、订单、购物爱好等等,这些数据通常是结构化的,并且数据之间存在各种各样的关联,传统的关系数据库曾经是这些数据的最佳载体。然而,随着业务的快速发展,这些数据急剧膨胀,记录数从几千万条增加到数十亿条,数据量从百GB增加到数TB,未来还可能增加到数千亿条和数百TB,传统的关系型数据库已经无法承担如此海量的数据。OceanBase解决不断增加的结构化数据存储与查询的问题。   从Eric Brewer教授的CAP(一致性C: Consistency, 可用性A: Availability,分区容错性P: Tolerance of network Partition)理论角度分析,作为电子商务企业,淘宝和其他公司的业务对一致性和可用性的要求高于分区容错性,数据特征是数据总量庞大且逐步增加,单位时间内的数据更新量并不大,但实时性要求很高。这就要求我们提供一套更加偏重于支持CA特性的系统,同时兼顾可分区性,并且在实时性、成本、性能等方面表现良好。   OceanBase的架构   OceanBase的逻辑架构简图    ▲   OceanBase架构的一些基本概念   主键   row key,也称为primary key,类似于DBMS的主键,与DBMS不同的是,OceanBase的主键总是二进制字符串(binary string),但可以有某种结构。OceanBase以主键为顺序存放表格数据   sstable   一种数据存储格式,OceanBase用来存储一个或几个表的一段按主键连续的数据   tablet   一个表按主键划分的一个(前开后闭的)范围,通常包含一个或几个sstable,一个tablet的数据量通常在256MB左右   基准数据和动态数据   OceanBase以增量方式记录一段时间内的表格数据的增删改,从而保持着表格主体数据在一段时间内相对稳定,其中增删改的数据称为动态数据(通常在内存,也称为内存表),而一段时间内相对稳定的主体数据称为基准数据,基准数据和转储后(保存到SSD固态盘或磁盘)的动态数据以sstable格式存储   ChunkServer   保存基准数据的服务器,通常是多台,为了避免软件硬件故障导致的服务中断,同一份基准数据通常保存了3份并存储在不同ChunkServer上   UpdateServer   保存动态数据的服务器,一般是单台服务器。为了避免软件硬件故障导致的服务中断,UpdateServer记录commit log并通常使用双机热备   MergeServer   进行静态动态数据合并的服务器,常常与ChunkServer共用一台物理服务器。MergeServer使得用户能够访问到完整的最新的数据   RootServer   配置服务器,一般是单台服务器。为了避免软件硬件故障导致的服务中断,RootServer记录commit log并通常采用双机热备。由于RootServer负载一般都很轻,所以它常常与UpdateServer共用物理机器   冻结   指动态数据(也称为内存表)的更新到一定时间或者数据量达到一定规模后,OceanBase停止该块动态数据的修改,后续的更新写入新的动态数据块(即新的内存表),旧的动态数据块不再修改,这个过程称为冻结   转储   出于节省内存或者持久化等原因将一个冻结的动态数据块(内存表)持久化(转化为sstable并保存到SSD固态盘或磁盘上)的过程   数据合并(merge)   查询时,查询项的基准数据与其动态数据(即增删改操作)合并以得到该数据项的最新结果的过程。此外,把旧的基准数据与冻结的动态数据进行合并生成新的基准数据的过程也称为数据合并   联表(join)   一张表与另一张或几张表基于主键的左连接关系,类似于DBMS的自然连接   COW   Copy on Write的缩写,在OceanBase中特指BTree在更新时复制数据备份写入,避免系统锁的技术手段   OceanBase的特点   OceanBase功能   OceanBase设计和实现的时候暂时摒弃了不紧急的DBMS的功能,例如临时表,视图(view),研发团队把有限的资源集中到关键点上,当前OceanBase主要解决数据更新一致性、高性能的跨表读事务、范围查询、join、数据全量及增量dump、批量数据导入。   OceanBase数据访问特点   虽然数据总量比较大,但跟许多行业一样,淘宝业务一段时间(例如小时或天)内数据的增删改是有限的(通常一天不超过几千万次到几亿次),根据这个特点,OceanBase把一段时间内的增删改等修改操作以增量形式记录下来(称之为动态数据,通常保存在内存中),这样也使得了主体数据在一段时间内保持了相对稳定(称之为基准数据)。   由于动态数据相对较小,通常情况下,OceanBase把它保存在独立的服务器UpdateServer的内存中。以内存保存增删改记录极大地提高了系统写事务的性能。此外,假如每条修改平均消耗100 Bytes,那么10GB内存可以记录100M(即1亿)条修改,且扩充UpdateServer内存即增加了内存中容纳的修改量。不仅如此,由于冻结后的内存表不再修改,它也可以转换成sstable格式并保存到SSD固态盘或磁盘上。转储到SSD固态盘后所占内存即可释放,并仍然可以提供较高性能的读服务,这也缓解了极端情况下UpdateServer的内存需求。为了应对机器故障,动态数据服务器UpdateServer写commit log并采取双机(乃至多机)热备。由于UpdateServer的主备机是同步的,因此备机也可同时提供读服务。   因为基准数据相对稳定,OceanBase把它按照主键(primary key,也称为row key)分段(即tablet)后保存多个副本(一般是3个)到多台机器(ChunkServer)上,避免了单台机器故障导致的服务中断,多个副本也提升了系统服务能力。单个tablet的尺寸可以根据应用数据特点进行配置,相对配置过小的tablet会合并,过大的tablet则会分裂。   由于tablet按主键分块连续存放,因此OceanBase按主键的范围查询对应着连续的磁盘读,十分高效。   对于已经冻结/转储的动态数据,OceanBase的ChunkServer会在自己不是太繁忙的时候启动基准数据与冻结/转储内存表的合并,并生成新的基准数据。这种合并过程其实是一种范围查询,是一串连续的磁盘读和连续的磁盘写,也是很高效的。   传统DBMS提供了强大的事务性、良好的一致性和很短的查询修改响应时间,但数据规模受到严重制约,缺乏扩展性;现代云计算提供了极大的数据规模、良好的扩展性,但缺乏跨行跨表事务、数据一致性也较弱、查询修改响应时间通常也较长,OceanBase的设计和实现融合了二者的优势:   --------------------------------------------------------------------------------   UpdateServer:类似于DBMS中的DB角色,提供跨行跨表事务和很短的查询修改的响应时间以及良好的一致性。   ChunkServer:类似于云计算中的工作机(如GFS的chunk server),具有数据多副本(通常是3)、中等规模数据粒度(tablet大小约256MB)、自动负载平衡、宕机恢复、机器plug and play等特点,系统容量及性能可随时扩展。   MergeServer:结合ChunkServer和UpdateServer,获得最新数据,实现数据一致性。   RootServer:类似于云计算中的主控机(如GFS master),进行机器故障检测、负载平衡计算、负载迁移调度等。   --------------------------------------------------------------------------------   上述的DBMS和云计算技术的优势互补使得OceanBase既具有传统DBMS的跨行跨表事务、数据的强一致性以及很短的查询修改响应时间,还有云计算的海量数据管理能力、自动故障恢复、自动负载平衡以及良好的扩展性。   OceanBase当前在淘宝的应用   OceanBase现在已经应用于淘宝收藏夹,用于存储淘宝用户收藏条目和具体的商品、店铺信息,每天支持4~5千万的更新操作。等待上线的应用还包括CTU、SNS等,每天更新超过20亿,更新数据量超过2.5TB,并会逐步在淘宝内部推广,也期待外部合作者。   主要的性能数据   测试软硬件环境   Red Hat Enterprise Linux Server release 5.4 (Tikanga)   gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)   Intel(R) Xeon(R) CPU E5520 @ 2.27GH   ChunkServer & MergeServer:Memory 16GB Disk 300GB SAS*10 NO Raid   UpdateServer & RootServer:Memory 48GB Disk 300GB SAS*6 Raid1   测试环境部署简图   ▲   测试数据规模   21亿条数据,基准数据3备份。   测试Schema   两张表,其中表1中有21列,表2中11列。   其中表1中的11列和表2中的11列存在join关系。   单条记录大小为500字节。   测试性能曲线图   Range数据查询   ▲   单条数据查询   ▲   当压力最大时,ChunkServer单台输出数据90MB/S,已经接近了千兆网卡的极限   更新数据   ▲

2015-10-23

OceanBase-千亿级海量数据库_日照.pdf

淘宝的开源数据库OceanBase的文档

2015-10-23

李春葆:数据结构习题与解析(C语言版)

李春葆:数据结构习题与解析(C语言版)

2015-03-02

C#多媒体定时器 工具

使用方法 (1) 添加dll文件到项目中 (2) 使用命名空间 using Dongzr.MidiLite; (3) 定义 EventHandler. void timer1_Tick(object sender, EventArgs e) { //.......................... } (4) 定义计时器 static MmTimer timer1; (5) 初始化并开始 timer1 = new MmTimer(); timer1.Mode = MmTimerMode.Periodic; timer1.Interval = 1; timer1.Tick += new EventHandler(timer1_Tick); timer1.Start(); (6) 停止并释放 timer1.Stop(); timer1.Dispose(); 另外,在项目中的工具栏中也可以看到该控件,也可以将该控件直接拖到窗体上,设置属性,添加事件,然后开始计时。

2015-01-27

简单的事件委托源码

该程序是应用委托事件的一个小例子,结构清晰明了,可以用来学习事件和委托

2014-07-01

利用MVC模式编写的Winform程序源码

根据文章《Introduction to Model View Control (MVC) Pattern using C#》编写的程序源码,可以用来学习MVC,文章链接http://www.c-sharpcorner.com/UploadFile/rmcochran/MVC_intro12122005162329PM/MVC_intro.aspx?ArticleID=448db537-f236-497d-a16b-46c5d1141e3f 其他用户翻译后文章地址http://www.cnblogs.com/c-delight/archive/2005/12/27/305694.html

2014-06-27

《人月神话》(中文+英文)

目录第1章 焦油坑 1.1 编程系统产品 《人月神话》 1.2 职业的乐趣 1.3 职业的苦恼 第2章 人月神话 2.1 乐观主义 2.2 人月 2.3系统测试 2.4 空泛的估算 2.5 重复产生的进度灾难 第3章 外科手术队伍 3.1 问题 3.2 Mills的建议 3.3 如何运作 3.4 团队的扩建 第4章 贵族专制、民主政治和系统设计 4.1 概念的完整性 4.2 获得概念的完整性 4.3 贵族专制统治和民主政治 4.4 在等待时,实现人员应该做什么 第5章 画蛇添足 5.1 结构师的交互准则和机制 5.2 自律-开发第二个系统所带来的后果 第6章 贯彻执行 6.1 文档化的规格说明-手册 6.2 形式化定义 6.3 直接整合 6.4 会议和大会 6.5 多重实现 6.6 电话日志 6.7 产品测试 第7章 为什么巴别塔会失败 7.1 巴别塔的管理教训 7.2 大型编程项目中的交流 7.3 项目工作手册 7.4 大型编程项目的组织架构 第8章 胸有成竹 8.1 Portman的数据 8.2 Aron的数据 8.3 Harr的数据 8.4 OS/360的数据 8.5 Corbato的数据 第9章 削足适履 9.1 作为成本的程序空间 9.2 规模控制 9.3 空间技能 9.4 数据的表现形式是编程的根本 第10章 提纲挈领 10.1 计算机产品的文档 10.2 大学科系的文档 10.3 软件项目的文档 10.4 为什么要有正式的文档 第11章 未雨绸缪 11.1 试验性工厂和增大规模 11.2 惟一不变的就是变化本身 11.3 为变更计划系统 11.4 为变更计划组织架构 11.5 前进两步,后退一步 11.6 前进一步,后退一步 第12章 干将莫邪 12.1 目标机器 12.2 辅助机器和数据服务 12.3 高级语言和交互式编程 第13章 整体部分 13.1剔除bug的设计 13.2 构件单元调试 13.3 系统集成调试 第14章 祸起萧墙 14.1 里程碑还是沉重的负担 14.2 “其他的部分反正会落后” 14.3 地毯的下面 第15章 另外一面 15.1 需要什么样的文档 15.2 流程图 15.3 自文档化的程序 第16章 没有银弹-软件工程中的根本和次要问题 16.1 摘要 16.2 介绍 16.3 是否一定那么困难呢?-根本困难 16.4 以往解决次要困难的一些突破 16.5 银弹的希望 16.6 针对概念上根本问题的颇具前途的方法 第17章 再论“没有银弹” 17.1 人狼和其他恐怖传说 17.2 存在着银弹-就在这里! 17.3 含糊的表达将会导致误解 17.4 Harel的分析 17.5 Jones的观点-质量带来生产率 17.6 那么,生产率的情形如何 17.7 面向对象编程-这颗铜质子弹可以吗 17.8 重用的情况怎样 17.9 学习大量的词汇-对软件重用的一个可预见,但还没有被预言的问题 17.10 子弹的本质-形势没有发生改变 第18章 《人月神话》的观点:是与非 18.1 第1章 焦油坑 18.2 第2章 人月神话 18.3 第3章 外科手术队伍 18.4 第4章 贵族专制、民主政治和系统设计 18.5 第5章 画蛇添足 18.6 第6章 贯彻执行 18.7 第7章 为什么巴别塔会失败 18.8 第8章 胸有成竹 18.9 第9章 削足适履 18.10 第10章 提纲挈领 18.11 第11章 未雨绸缪 18.12 第12章 干将莫邪 18.13 第13章 整体部分 18.14 第14章 祸起萧墙 18.15 第15章 另外一面 18.16 第1版结束语 第19章 20年后的《人月神话》 19.1 为什么要出版20周年纪 《人月神话(影印版)》 念版本 19.2 核心观点-概念完整性和结构师 19.3 开发第二个系统所引起的后果-盲目的功能和频率猜测 19.4 图形界面的成功 19.5 没有构建舍弃原型-瀑布模型是错误的! 19.6 增量开发模型更佳-渐进的精化 19.7 关于信息隐藏,Parnas是正确的,我是错误的 19.8 人月到底有多少神话色彩?-Boehm的模型和数据 19.9 人就是一切(或者说,几乎是一切) 19.10放弃权利的力量 19.11更令人惊讶的新事物是什么?-数百万的计算机 19.12全新的软件产业-塑料薄膜包装的成品软件 19.13买来开发-使用塑料包装的成品软件包作为构件 19.14软件工程的状态和未来 结束语:令人向往、激动人心和充满乐趣的50年 注解与参考文献

2013-09-23

定时器详解及例题课件

本演示文稿详细介绍了SetTimer及KillTimer的参数及并结合实例讲解了它的使用方法,清晰,明了。

2012-10-18

C#委托与事件

委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。

2012-10-17

C#+4.0图解教程.pdf

《C# 4.0图解教程》是一本广受称赞的C#教程。它以图文并茂的形式,用朴实简洁的文字,并辅之以大量表格和代码示例,全面地阐述了最新版C#语言的各种特性,使读者能够快速理解、学习和使用C#。同时,《C# 4.0图解教程》还讲解了C#与VB、C++等主流语言的不同点和相似之处。 《C# 4.0图解教程》是经典的C#入门书,不仅适合没有任何编程语言基础的初级读者阅读,而且还是有VB、C++等语言基础的C#初学者的最佳选择。 目 录    第1章 C#和NET框架  1   1.1 在NET之前 1    1.1.1 20世纪90年代后期的Windows编程 1    1.1.2 下一代平台服务的目标 2    1.2 进入Microsoft NET 2    1.2.1 NET框架的组成 2    1.2.2 大大改进的编程环境 3   1.3 编译成CIL 5    1.4 编译成本机代码并执行 5    1.5 CLR 6    1.6 CLI 7    1.7 缩写回顾 8    第2章 C#编程概述 9    2.1 一个简单的C#程序 9    2.2 标识符和关键字 11   2.2.1 命名约定 11   2.2.2 关键字 12   2.3 Main:程序的起始点 12   2.4 空白 13   2.5 语句 13   2.5.1 简单语句 13   2.5.2 块 14   2.6 从程序中输出文本 14   2.6.1 Write 14   2.6.2 WriteLine 15   2.6.3 格式字符串 15   2.6.4 多重标记和值 16   2.7 注释 16   2.7.1 关于注释的补充 17   2.7.2 文档注释 17   2.7.3 注释类型总结 18   第3章 类型、存储和变量 19   3.1 C#程序是一组类型声明 19   3.2 类型是一种模板 20   3.3 实例化类型 20   3.4 数据成员和函数成员 21   3.5 预定义类型 21   3.6 用户定义类型 23   3.7 栈和堆 24   3.7.1 栈 24   3.7.2 堆 25   3.8 值类型和引用类型 25   3.8.1 存储引用类型对象的成员 26   3.8.2 C#类型的分类 27   3.9 变量 27   3.9.1 变量声明 27   3.9.2 多重变量声明 29   3.9.3 使用变量的值 29   3.10 静态类型和dynamic关键字 29   3.11 可空类型 30   3.11.1 创建可空类型 30   3.11.2 为可空类型赋值 31   第4章 类:基础 32   4.1 类的概述 32   4.2 程序和类:一个快速的示例 33   4.3 声明类 33   4.4 类成员 34   4.4.1 字段 34   4.4.2 显式和隐式字段初始化 35   4.4.3 声明多个字段 36   4.4.4 方法 36   4.5 创建变量和类的实例 37   4.6 为数据分配内存 37   4.7 实例成员 38   4.8 访问修饰符 39   4.9 从类的内部访问成员 41   4.10 从类的外部访问成员 42   4.11 综合应用 43   第5章 方法 45   5.1 方法的结构 45   5.2 本地变量 47   5.2.1 类型推断和var关键字 47   5.2.2 嵌套块中的本地变量 48   5.3 本地常量 49   5.4 方法调用 51   5.5 返回值 52   5.6 参数 54   5.6.1 形参 54   5.6.2 实参 55   5.6.3 带位置输入参数的方法示例 55   5.7 值参数 56   5.8 引用参数 58   5.9 输出参数 60   5.10 参数数组 62   5.10.1 方法调用 63   5.10.2 数组作实参 65   5.11 参数类型总结 66   5.12 方法重载 66   5.13 命名参数 67   5.14 可选参数 68   5.15 栈帧 71   5.16 递归 72   第6章 类进阶 74   6.1 类成员 74   6.2 实例类成员 76   6.3 静态字段 76   6.4 从类的外部访问静态成员 77   6.4.1 静态字段示例 77   6.4.2 静态成员的生存期 78   6.5 静态函数成员 79   6.6 其他静态类成员类型 80   6.7 成员常量 80   6.8 属性 82   6.8.1 属性声明和访问器 83   6.8.2 属性示例 83   6.8.3 使用属性 84   6.8.4 属性和关联字段 85   6.8.5 执行其他计算 86   6.8.6 只读和只写属性 87   6.8.7 计算只读属性示例 87   6.8.8 属性和数据库示例 88   6.8.9 属性vs公共字段 88   6.8.10 自动实现属性 89   6.8.11 静态属性 89   6.9 实例构造函数 90   6.9.1 带参数的构造函数 91   6.9.2 默认构造函数 92   6.10 静态构造函数 93   6.10.1 静态构造函数示例 93   6.10.2 构造函数的可访问性 94   6.11 对象初始化列表 94   6.12 析构函数 95   6.12.1 调用析构函数 96   6.12.2 标准清理模式 98   6.13 比较构造函数和析构函数 99   6.14 readonly修饰符 99   6.15 this关键字 100   6.16 索引 101   6.16.1 什么是索引 102   6.16.2 索引和属性 102   6.16.3 声明索引 103   6.16.4 索引的set访问器 104   6.16.5 索引的get访问器 104   6.16.6 关于索引的补充 105   6.16.7 为Employee示例声明索引 105   6.16.8 另一个索引示例 106   6.16.9 索引重载 107   6.17 访问器的访问修饰符 107   6.18 分部类和分部类型 109   第7章 类和继承 12   7.1 类继承 112   7.2 访问继承的成员 113   7.3 隐藏基类的成员 115   7.4 基类访问 116   7.5 使用基类的引用 117   7.5.1 虚方法和覆写方法 119   7.5.2 覆写标记为override的方法 120   7.5.3 覆盖其他成员类型 123   7.6 构造函数的执行 124   7.6.1 构造函数初始化语句 125   7.6.2 类访问修饰符 127   7.7 程序集间的继承 128   7.8 成员访问修饰符 129   7.8.1 访问成员的区域 130   7.8.2 公有成员的可访问性 131   7.8.3 私有成员的可访问性 131   7.8.4 受保护成员的可访问性 132   7.8.5 内部成员的可访问性 132   7.8.6 受保护内部成员的可访问性 132   7.8.7 成员访问修饰符的总结 133   7.9 抽象成员 133   7.10 抽象类 134   7.10.1 抽象类和抽象方法的示例 135   7.10.2 抽象类的另一个例子 136   7.11 密封类 137   7.12 静态类 137   7.13 扩展方法 138   第8章 表达式和运算符 142   8.1 表达式 142   8.2 字面量 143   8.3 整数字面量 144   8.4 字符字面量 145   8.5 字符串字面量 146   8.6 求值顺序 147   8.6.1 优先级 148   8.6.2 结合性 148   8.7 简单算术运算符 149   8.8 求余运算符 149   8.9 关系比较运算符和相等比较运算符 150   8.10 递增运算符和递减运算符 152   8.11 条件逻辑运算符 153   8.12 逻辑运算符 154   8.13 移位运算符 155   8.14 赋值运算符 157   8.15 条件运算符 158   8.16 一元算术运算符 159   8.17 用户定义类型转换 160   8.18 运算符重载 162   8.18.1 运算符重载的限制 163   8.18.2 运算符重载的示例 164   8.19 typeof运算符 165   8.20 其他运算符 166   第9章 语句 167   9.1 什么是语句 167   9.2 表达式语句 168   9.3 控制流语句 169   9.4 if 语句 169   9.5 if…else语句 170   9.6 switch语句 171   9.6.1 分支示例 172   9.6.2 switch语句的补充 173   9.6.3 switch标签 174   9.7 while循环 174   9.8 do循环 175   9.9 for循环 176   9.9.1 for语句中变量的有效范围 177   9.9.2 初始化语句和迭代表达式中的多表达式 178   9.10 跳转语句 178   9.11 break语句 178   9.12 continue语句 179   9.13 标签语句 180   9.13.1 标签 180   9.13.2 标签语句的范围 180   9.14 goto语句 181   9.15 using语句 182   9.15.1 资源的包装使用 183   9.15.2 using语句的示例 183   9.15.3 多个资源和嵌套 184   9.15.4 using语句的另一种形式 185   9.16 其他语句 186   第10章 命名空间和程序集 187   10.1 引用其他程序集 187   10.2 命名空间 191   10.2.1 命名空间名称 194   10.2.2 命名空间的补充 194   10.2.3 命名空间跨文件伸展 195   10.2.4 嵌套命名空间 195   10.3 using指令 196   10.3.1 using命名空间指令 196   10.3.2 using别名指令 197   10.4 程序集的结构 198   10.5 程序集标识符 199   10.6 强命名程序集 200   10.7 程序集的私有方式部署 201   10.8 共享程序集和GAC 201   10.8.1 把程序集安装到GAC 201   10.8.2 GAC内的并肩执行 202   10.9 配置文件 203   10.10 延迟签名 203   第11章 异常 205   11.1 什么是异常 205   11.2 try语句 206   11.3 异常类 207   11.4 catch子句 207   11.4.1 使用特定catch子句的示例 208   11.4.2 catch子句段 209   11.5 finally块 210   11.6 为异常寻找处理代码 211   11.7 更进一步搜索 211   11.7.1 一般法则 212   11.7.2 搜索调用栈的示例 213   11.8 抛出异常 214   11.9 不带异常对象的抛出 215   第12章 结构 217   12.1 什么是结构 217   12.2 结构是值类型 218   12.3 对结构赋值 219   12.4 构造函数和析构函数 220   12.4.1 实例构造函数 220   12.4.2 静态构造函数 221   12.4.3 构造函数和析构函数的总结 221   12.5 字段初始化是不允许的 222   12.6 结构是密封的 222   12.7 装箱和取消装箱 222   12.8 结构作为返回值和参数 222   12.9 关于结构的附加信息 222   第13章 枚举 224   13.1 枚举 224   13.1.1 设置底层类型和显式值 225   13.1.2 隐式成员编号 226   13.2 位标志 227   13.2.1 Flags特性 229   13.2.2 使用位标志的示例 230   13.3 关于枚举的补充 231   第14章 数组 233   14.1 数组 233   14.1.1 定义 233   14.1.2 重要细节 234   14.2 数组的类型 234   14.3 数组是对象 235   14.4 一维数组和矩形数组 236   14.5 实例化一维数组或矩形数组 236   14.6 访问数组元素 237   14.7 初始化数组 238   14.7.1 显式初始化一维数组 238   14.7.2 显式初始化矩形数组 239   14.7.3 初始化矩形数组的语法点 239   14.7.4 快捷语法 240   14.7.5 隐式类型数组 240   14.7.6 综合内容 241   14.8 交错数组 241   14.8.1 声明交错数组 242   14.8.2 快捷实例化 242   14.8.3 实例化交错数组 242   14.8.4 交错数组中的子数组 243   14.9 比较矩形数组和交错数组 244   14.10 foreach语句 245   14.10.1 迭代变量是只读的 246   14.10.2 foreach语句和多维数组 247   14.11 数组协变 248   14.12 数组继承的有用成员 249   14.13 比较数组类型 252   第15章 委托 253   15.1 什么是委托 253   15.2 声明委托类型 255   15.3 创建委托对象 255   15.4 赋值委托 257   15.5 组合委托 257   15.6 为委托增加方法 258   15.7 从委托移除方法 259   15.8 调用委托 259   15.9 委托的示例 260   15.10 调用带返回值的委托 261   15.11 调用带引用参数的委托 262   15.12 匿名方法 262   15.12.1 使用匿名方法 263   15.12.2 匿名方法的语法 263   15.12.3 变量和参数的作用域 265   15.13 Lambda表达式 266   第16章 事件 269   16.1 事件和委托相似 269   16.2 源代码组件概览 270   16.3 声明事件 271   16.3.1 事件是成员 271   16.3.2 委托类型和EventHandler 272   16.4 触发事件 272   16.5 订阅事件 273   16.6 标准事件的用法 275   16.6.1 使用EventArgs类 275   16.6.2 通过扩展EventArgs来传递数据 276   16.6.3 使用自定义委托 276   16.7 MyTimerClass代码 278   16.8 事件访问器 279   第17章 接口 280   17.1 什么是接口 280   17.2 声明接口 283   17.3 实现接口 284   17.4 接口是引用类型 285   17.5 接口和as运算符 287   17.6 实现多个接口 287   17.7 实现具有重复成员的接口 288   17.8 多个接口的引用 289   17.9 派生成员作为实现 291   17.10 显式接口成员实现 291   17.11 接口可以继承接口 294   第18章 转换 297   18.1 什么是转换 297   18.2 隐式转换 298   18.3 显式转换和强制转换 299   18.4 转换的类型 300   18.5 数字的转换 301   18.5.1 隐式数字转换 301   18.5.2 溢出检测上下文 302   18.5.3 显式数字转换 303   18.6 引用转换 306   18.6.1 隐式引用转换 307   18.6.2 显式引用转换 308   18.6.3 有效显式引用转换 308   18.7 装箱转换 309   18.8 拆箱转换 311   18.9 用户自定义转换 312   18.9.1 用户自定义转换的约束 312   18.9.2 用户自定义转换的示例 313   18.9.3 计算用户自定义转换 314   18.9.4 多步用户自定义转换的示例 315   18.10 is运算符 316   18.11 as运算符 317   第19章 泛型 318   19.1 什么是泛型 318   19.2 C#中的泛型 320   19.3 泛型类 321   19.4 声明泛型类 321   19.5 创建构造类型 322   19.6 创建变量和实例 323   19.6.1 使用泛型的栈的示例 324   19.6.2 比较泛型和非泛型栈 325   19.7 类型参数的约束 326   19.7.1 Where子句 327   19.7.2 约束类型和次序 327   19.8 泛型方法 328   19.8.1 声明泛型方法 328   19.8.2 调用泛型方法 329   19.8.3 泛型方法的示例 330   19.9 扩展方法和泛型类 331   19.10 泛型结构 332   19.11 泛型委托 332   19.12 泛型接口 334   19.12.1 使用泛型接口的示例 335   19.12.2 泛型接口的实现必须唯一 336   19.13 泛型的协变和逆变 337   19.13.1 接口的协变和逆变 341   19.13.2 有关变化的更多内容 342   第20章 枚举数和迭代器 344   20.1 枚举数和可枚举类型 344   20.1.1 使用foreach语句 344   20.1.2 枚举数类型 345   20.2 使用IEnumerator接口 346   20.3 IEnumerable接口 349   20.4 不实现接口的枚举数 351   20.5 泛型枚举接口 352   20.6 IEnumerator接口 352   20.7 IEnumerable接口 354   20.8 迭代器 355   20.8.1 迭代器块 356   20.8.2 使用迭代器来创建枚举数 357   20.8.3 使用迭代器来创建可枚举类型 358   20.9 常见迭代器模式 360   20.10 产生可枚举类型和枚举数 360   20.11 产生多个可枚举类型 361   20.12 产生多个枚举数 362   20.13 迭代器实质 363   第21章 介绍LINQ 365   21.1 什么是LINQ 365   21.2 LINQ提供程序 366   21.3 查询语法和方法语法 368   21.4 查询变量 369   21.5 查询表达式的结构 370   21.5.1 from子句 371   21.5.2 join子句 372   21.5.3 什么是联结 373   21.5.4 查询主体中的fromletwhere片段 375   21.5.5 orderby子句 378   21.5.6 select…group子句 378   21.5.7 查询中的匿名类型 380   21.5.8 group子句 380   21.5.9 查询延续 382   21.6 标准查询运算符 383   21.6.1 查询表达式和标准查询运算符 384   21.6.2 标准查询运算符的签名 385   21.6.3 委托作为参数 386   21.6.4 LINQ预定义的委托类型 387   21.6.5 使用委托参数的示例 388   21.6.6 使用Lambda表达式参数的示例 388   21.7 LINQ to XML 390   21.7.1 标记语言 390   21.7.2 XML基础 390   21.7.3 XML类 391   21.7.4 使用XML树的值 394   21.7.5 使用XML属性 397   21.7.6 节点的其他类型 400   21.7.7 使用LINQ to XML的LINQ查询 401   第22章 异步编程简介 404   22.1 进程、线程以及异步编程 404   22.1.1 多线程处理带来的问题 405   22.1.2 多线程处理的复杂度 405   22.2 并行循环 406   22.3 BackgroundWorker类 408   22.3.1 BackgroundWorker类的示例代码 411   22.3.2 BackgroundWorker用于WPF程序的例子 414   22.4 异步编程模式 416   22.5 BeginInvoke和EndInvoke 417   22.5.1 等待—直到结束模式 418   22.5.2 AsyncResult类 419   22.5.3 轮询模式 420   22.5.4 回调模式 421   22.6 计时器 423   第23章 预处理指令 426   23.1 什么是预处理指令 426   23.2 基本规则 426   23.3 #define和#undef指令 427   23.4 条件编译 428   23.5 条件编译结构 429   23.6 诊断指令 431   23.7 行号指令 431   23.8 区域指令 432   23.9 #pragma warning指令 433   第24章 反射和特性 434   24.1 元数据和反射 434   24.2 Type类 435   24.3 获取Type对象 436   24.4 什么是特性 438   24.5 应用特性 439   24.6 预定义的保留的特性 439   24.6.1 Obsolete特性 439   24.6.2 Conditional特性 440   24.6.3 预定义的特性 441   24.7 有关应用特性的更多内容 442   24.7.1 多个特性 442   24.7.2 其他类型的目标 442   24.7.3 全局特性 443   24.8 自定义特性 443   24.8.1 声明自定义特性 444   24.8.2 使用特性的构造函数 444   24.8.3 指定构造函数 444   24.8.4 使用构造函数 445   24.8.5 构造函数中的位置参数和命名参数 445   24.8.6 限制特性的使用 446   24.8.7 自定义特性的最佳实践 447   24.9 访问特性 448   24.9.1 使用IsDefined方法 448   24.9.2 使用GetCustomAttribute方法 449   第25章 其他主题 450   25.1 概述 450   25.2 字符串 450   25.2.1 使用StringBuilder类 451   25.2.2 格式化数字字符串 452   25.3 把字符串解析为数据值 455   25.4 关于可空类型的更多内容 457   25.4.1 使用空接合运算符 458   25.4.2 使用可空用户自定义类型 459   25.5 Main方法 460   25.6 文档注释 461   25.6.1 插入文档注释 462   25.6.2 使用其他XML标签 463   25.7 嵌套类型 463   25.7.1 嵌套类的示例 464   25.7.2 可见性和嵌套类型 465   25.8 和COM的互操作 467

2012-10-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除