随笔分类 - CSharp Technical
CSharp Technical
摘要:一直以来总是对这个问题的认识比较朦胧,我相信很多朋友也是这样的,总是听到内存一会在栈上分配,一会又在堆上分配,那么它们之间到底是怎么的区别呢?为了说明这个问题,我们先来看一下内存内部的组织情况.从上图可知,程序占用的内存被分了以下几部分.1、栈区(stack)由编译器自动分配释放 ,存放函数的参数值,局部变量的值等,内存的分配是连续的,类似于平时我们所说的栈,如果还不清楚,那么就把它想成数组,它的内存分配是连续分配的,即,所分配的内存是在一块连续的内存区域内.当我们声明变量时,那么编译器会自动接着当前栈区的结尾来分配内存.2、堆区(heap)一般由程序员分配释放, 若程序员不释放,程序结束时可
阅读全文
摘要:前言:由于身边也没什么学习资料,也就一边利用网络一边自己理解整理,慢慢地步入神秘的反射机制。 反射提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们进行访问。简而言之, 反射机制指的是程序在运行时能够获取自身的信息。例如一个对象能够在运行时知道自己有哪些方法和属性。使用Assembly定义和加载程序集,加载在程序集清单中列出的模块,以及从此程序集中查找类型并创建该类型的实例。使用Module发现以下信息:包含模块的程序集以及模块中的类等。您...
阅读全文
摘要:关于Assembly.CreateInstance()与Activator.CreateInstance()方法动态创建类对象,大多是Activator.CreateInstance()和Activator.CreateInstance<T>()方法,非常好用,一般都用了Assembly.Load("AssemblyName").CreateInstance ("ClassName");的方法,研究一下这两者到底有什么区别,在msdn里,查到了两个方法的介绍:Assembly.CreateInstance 方法 (String)使用区分大小写
阅读全文
摘要:在所有关于C#事件机制的介绍中,我更倾向于发布者/订阅者(Publisher/Subscriber)这种描述。理解事件机制并不是一件容易的事情,它所涉及的思想值得我们好好去研究。本文资源来自《C#与.NET技术平台实战演练》——中国青年出版社谈到事件,我们涉及到两个角色:事件发布者(Publisher)和事件订阅者(Scriber),也可以说是事件发送者(Sender)和事件接收者(Receiver)的关系。举个例子来说,市面上目前有许多杂志,杂志的种类也很多。而我只对其中的某些感兴趣,那么我就可以向杂志发行商提出订阅。之后,每当杂志发行时,我就会收到我在杂志发行商那儿订阅的杂志。在这个关系中
阅读全文
摘要:在多线程中,为了使数据保持一致性必须要对数据或是访问数据的函数加锁,在数据库中这是很常见的,但是在程序中由于大部分都是单线程的程序,所以没有加锁的必要,但是在多线程中,为了保持数据的同步,一定要加锁,好在Framework中已经为我们提供了三个加锁的机制,分别是Monitor类、Lock关键字和Mutex类。 其中Lock关键词用法比较简单,Monitor类和Lock的用法差不多。这两个都是锁定数据或是锁定被调用的函数。而Mutex则多用于锁定多线程间的同步调用。简单的说,Monitor和Lock多用于锁定被调用端,而Mutex则多用锁定调用端。例如下面程序:由于这种程序都是毫秒级的,所以运行
阅读全文
摘要:在浏览器地址栏输入javascript:alert (document. cookie)会话(Session) 跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户 身份,Session通过在服务器端记录信息确定用户身份。本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie, 什么时候不能用Session。 1.1 Cookie机制 在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二
阅读全文
摘要:即使是做网络应用,在断线情况下,也需要考虑数据的本地存储。在SQLite出现之前,数据量大的情况下,我们一直使用ACCESS,数据量小,则文件存储。ACCESS不支持事务原子性,在断电情况下(这种情况总是会发生)会导致数据很难恢复。一:安装SQLITE,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统。我直接使用的是http://sqlite.phxsoftware.com/(An open source ADO.NET provider for the SQLite database engine)。下载完毕是一个EXE,安装后根目录如下:Bin下有一个测试工具,可以查看本地运行SQ
阅读全文
摘要:C#笔记20:多线程之线程同步中的信号量AutoResetEvent和ManualResetEvent本章概要:1:终止状态和非终止状态2:AutoResetEvent和ManualResetEvent的区别3:WaitHandle.WaitOne()等1:终止状态和非终止状态 首先说说线程的终止状态和非终止状态。AutoResetEvent和ManualResetEvent的构造函数中,都有bool变量来指明线程的终止状态和非终止状态。true表示终止状态,false表示非终止状态。看代码片段1:代码片段1: AutoResetEvent _autoResetEvent = n...
阅读全文
摘要:View Code<?xml version="1.0" encoding="utf-8" ?><Language> <!--报告录入 --> <ReportInputFrm value="Report Input"> <grpBasic>Basic Info</grpBasic> <lblSampleDate>Date</lblSampleDate> <lblSampleID>ID</lblSampleID> &l
阅读全文
摘要:Posted on 2008-06-23 14:39SmartStone阅读(1334)评论(2)编辑收藏//声明一个委托publicdelegatevoidSetTextBoxValue(stringvalue);//委托使用文本框voidSetMyTextBoxValue(stringvalue){//Control.InvokeRequired属性:获取一个值,该值指示调用方在对控件进行方法调用时是否必须调用Invoke方法,因为调用方位于创建控件所在的线程以外的线程中。当前线程不是创建控件的线程时为true,当前线程中访问是Falseif(this.TextBoxControl.Inv
阅读全文
摘要:控件生命周期1.初始化(对应Oninit方法)这里页面通过ProcessRequest方法来递归遍历它的子控件(即页面中的空间,其实页面也算控件)。使子控件依次调用它们的Oninit方法。我们这里可以重写控件的OnInit方法,来扩展控件功能或增加初始化内容。在本阶段还要打开视图状态跟踪功能,调用TrackviewState方法,这样存储在viewState对象里面的值在页面回发时才能正确灰复到控件属性中。2.加载视图状态(对应LoadViewState方法)本阶段仅在页面回发时才执行,加载视图状态到控件。在第一次访问页面时我们还没有获得存储到视图状态的状态数据。3.加载回传数据(对应Load
阅读全文
摘要:Windows API中所有的函数都包含在dll中,其中有3个最重要的DLL。 (1) Kernel32.dll 它包含那些用于管理内存、进程和线程的函数,例如CreateThread函数; (2) User32.dll 它包含那些用于执行用户界面任务(如窗口的创建和消息的传送)的函数,例如CreateWindow函数; (3) GDI32.dll 它包含那些用于画图和显示文本的函数。
阅读全文
摘要:.Net SDK下有很多命令工具,有许多在我们平时开发应用中很有帮助。最近看书总结了一些,但是难免有点以偏概全,挂一漏万。下面就介绍这些命令的基本用法,实际应用中可以参考MSDN。 切入正题,打开SDK命令提示,如下图:1、ildasm (IL Disassembler IL 反汇编器)。 它是一个重要的工具,通过它,可以查看元数据(metedata)信息,IL等。 保存、查看IL代码:在VS2008命令窗口输入ILDAsm,然后通过它的【文件】菜单打开文件,如下图:查看元数据信息:在ILDASM中按"Ctrl+M"即能查看元数据信息。如下图 2、SN.exe(Strong
阅读全文
摘要:异步的核心: IAsyncResultAsynchronousProgrammingModel整个异步调用过程中都是围绕IAsyncResult来进行的,大家可以看看上篇文章的例子,BeginXXX返回这个对象,EndXXX接收这个对象来结束当前异步对象,下面我们来看看IAsyncResult接口成员/和实现此接口的AsyncResult类成员(其中有些在上篇中已经涉及到)IAsyncResult接口1publicinterfaceIAsyncResult2{3WaitHandleAsyncWaitHandle{get;}//阻塞一个线程,直到一个或多个同步对象接收到信号4BooleanIsC
阅读全文
摘要:现在扩充下上篇文章的类(AsyncTest),提供更多的例子并从中做下简单的对比,从新的认识下异步的内部机制,下面我们增加一个新的委托1步,我们添加一个新方法(计算年薪YearlySalary)publicdecimalYearlySalary(decimalsalary,intmonthCount,decimalbonus);2步,为这个方法增加异步的功能,这样我们仍然使用委托(Delegate)publicdelegatedecimalSalaryEventHandler(decimalsalary,intmonthCount,decimalbonus);经过简单修改后,下面是我们新的As
阅读全文
摘要:在阅读下面知识前,我已经认为你已经具有c#的基础,包括简单的委托知识;代码使用VS2008开发,但是会在.Net Framework 2.0(C Sharp)编写什么是.Net异步机制呢? 在解释这个话题前,我们先看看同步的程序,就是我们常用的Hello World 程序。Code 1:1classProgram2{3staticvoidMain(string[]args)4{5//查看当前的线程ID,是否线程池里面的线程6Console.WriteLine("1,ThreadID:#{0},IsPoolThread?{1}",Thread.CurrentThread.Ma
阅读全文
摘要:静态构造函数是C#的一个新特性,其实好像很少用到。不过当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。 classSimpleClass{//StaticconstructorstaticSimpleClass(){//}} 在使用静态构造函数的时候应该注意几点: 1、静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符就没有意义了。 2、是在创建第一个类实例或任何静态成员被引用时,....
阅读全文
摘要:Visual Studio 2010其他版本此主题尚未评级评价此主题静态构造函数用于初始化任何静态数据,或用于执行仅需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。C#class SimpleClass{ // Static variable that must be initialized at run time. static readonly long baseline; // Static constructor is called at most one time, before any // instance const...
阅读全文
摘要:AutoResetEvent 有两种状态 一种终止状态,另一种 非终止状态构造函数有个bool参数,true 是终止, false 是非终止WaitOne 是用来等待的,如果AutoResetEvent 处于 非终止状态 那么会一直等待,直至调用 Set如果是终止状态 ,那么不会阻塞 会继续调用 Set 就是告知 我的工作完成了,我现在可以走了 ,大家久等了.线程阻塞成立的一对条件:1.线程中包含waitone();2.AutoResetEvent(bool)的bool为false,即事件状态为非终止状态;set()方法是将事件状态设置为终止状态(其实就是破坏第2个条件),允许一个或多个等待线
阅读全文
摘要:概述AutoResetEvent 允许线程通过发信号互相通信。 通常,当线程需要独占访问资源时使用该类。线程通过调用 AutoResetEvent 上的 WaitOne 来等待信号。 如果 AutoResetEvent 为非终止状态,则线程会被阻止,并等待当前控制资源的线程通过调用 Set 来通知资源可用。调用 Set 向 AutoResetEvent 发信号以释放等待线程。 AutoResetEvent 将保持终止状态,直到一个正在等待的线程被释放,然后自动返回非终止状态。 如果没有任何线程在等待,则状态将无限期地保持为终止状态。如果当 AutoResetEvent 为终止状态时线程调用 W
阅读全文

浙公网安备 33010602011771号