分类

链接

2011 年 12 月
 1234
567891011
12131415161718
19202122232425
262728293031  

近期文章

热门标签

新人福利,免费薅羊毛

Remoting实现双向通信

Remoting是NET平台下比较成熟高效的分布式技术,我们习惯采用传统的远程调用的方式使用Remoting。在客户端所在的Application Domain,我们通过Proxy(Transparent Proxy)远程地跨Application Domain调用一个方法。当来自Client端的调用请求通过Proxy到达Server端所在的Application Domain后,Remoting Infrastructure在Server 端激活(Activate)相应的远程对象(一个继承子System.MarshalByRefObject类对象)——这里仅仅以服务端激活对象(Server Activated Object——SAO),然后再Server端执行相应的操作后把Resu...

.NET 暂无评论 阅读(2,654)

Spring.NET基础篇

Spring.NET 移植自著名的 Java 开源项目 —— Spring,借助于 .NET 强大的反射机制,甚至拥有比原 Java 版本更强大的功能。只是不知道什么原因,在 .NET 领域似乎没有多少热度,其影响力甚至不如 Castle。因准备在个人项目中使用 IoC,因此花些时间对 Spring.NET 和 Castle 都作一些了解,本文权作学习笔记。Spring.NET 的宣传口号中有 "non-invasiveness. Quite simply" 的字样,表示是非入侵且易用的,当然作为一个IoC容器,这些都是最基本的特征。在 Spring.NET IoC 中最核心的内容应该是 IObjectFactory、IAppli...

.NET 暂无评论 阅读(2,345)

Microsoft .Net Remoting系列专题之三:Remoting事件处理全接触

前言:在Remoting中处理事件其实并不复杂,但其中有些技巧需要你去挖掘出来。正是这些技巧,仿佛森严的壁垒,让许多人望而生畏,或者是不知所谓,最后放弃了事件在Remoting的使用。关于这个主题,在网上也有很多讨论,相关的技术文章也不少,遗憾的是,很多文章概述的都不太全面。我在研究Remoting的时候,也对事件处理发生了兴趣。经过参考相关的书籍、文档,并经过反复的试验,深信自己能够把这个问题阐述清楚了。本文对于Remoting和事件的基础知识不再介绍,有兴趣的可以看我的系列文章,或查阅相关的技术文档...

.NET 暂无评论 阅读(2,349)

Microsoft .Net Remoting系列专题之二:Marshal、Disconnect与生命周期以及跟踪服务

Microsoft .Net Remoting系列专题之二  一、远程对象的激活 在Remoting中有三种激活方式,一般的实现是通过RemotingServices类的静态方法来完成。工作过程事实上是将该远程对象注册到通道中。由于Remoting没有提供与之对应的Unregister方法来注销远程对象,所以如果需要注册/注销指定对象,微软推荐使用Marshal(一般译为编组)和Disconnect配对使用。在《Net Remoting基础篇》中我已经谈到:Marshal()方法是将MarshalByRefObject类对象转化为ObjRef类对象,这个对象是存储生成代理以与远程对象通讯所需的所有相关...

.NET 暂无评论 阅读(2,203)

Microsoft .Net Remoting系列专题之一:.Net Remoting基础篇

Microsoft .Net Remoting系列专题之一 一、Remoting基础 什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式。从微软的产品角度来看,可以说Remoting就是DCOM的一种升级,它改善了很多功能,并极好的融合到.Net平台下。Microsoft® .NET Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架。这也正是我们使用Remoting的原因。为什么呢?在Windows操作系统中,是将应用程序分离为单独的进程。这个进程形成了应用程序代码和数据周围的一道边界。如果不采用进程间通信(RPC)机制,则...

.NET 暂无评论 阅读(2,351)

值类型、引用类型在堆栈、托管堆中分配

转自《发掘 C# 特性赋予科学计算项目以威力》 原著:Fahad Gilani 翻译:yy2better C#中对象类型主要有两种——引用类型(重量级对象)和值类型(轻量级对象)。 引用类型总是在堆中分配(除非使用 stackalloc 关键字),并给予一个额外的间接层;也即,它们需要通过对其存储位置的引用来访问。既然这些类型不能直接访问, 某个引用类型的变量总是保存实际对象的引用(或 null ) 而不是对象本身。假设引用类型在堆中分配,运行时必须确保每个分配请求被正确执行。考虑下面代码,它执行一次成功的分配: Matrix m = n...

.NET 暂无评论 阅读(1,931)

代码的性能研究1

某哥们写了如下代码,被论坛上某“高手”一顿痛批,说此代码除了不符合编码规范外,性能也会非常低,原因是每次循环都会调用 ToCharArray() 。~~~~ string s = "abcdefg"; foreach (char c in s.ToCharArray()) Console.WriteLine(c); 在此我们不追究编码规范,只深究所谓性能降低的问题。可以肯定的说,那个高手也只是所谓的“高手”。呵呵!道理很简单,如果每次循环都调用ToCharArray()的话,那么每次都会生成一个新的char[],IEnumerator.Current 每次都会指向第一个字符(也就是'a'),IEnumerator.MoveNext() 永...

.NET 暂无评论 阅读(1,973)

一个有关 finally 的有趣问题

看看下面的代码,会返回几? static int Test() { int x = 1; try { return x; } finally { x = 2; } } 结果是 1,尽管 finally 内的代码会在方法结束前被调用,但是并没有改变输出结果,为什么会这样?看看编译器是怎么做的? 反编译代码 private static int Test() { int num2; int num1 = 1; try { num2 = num1; } finally { num1 = 2; } return num2; } 看来编译器还是动了一番心...

.NET 评论(1) 阅读(2,588)

LINQ to XML

LINQ to XML 提供了大量和 System.Xml 类似的操作手段用于修改 XML 文档。 var doc = new XDocument(); // Add doc.Add(new XElement("people")); // Add Child var people = doc.Root; people.Add(new XElement("person")); var person = doc.Element("people").Element("person"); person.Add( new XElement("id", 1), new XElement("name", "user1"), new XElement("age", 12)); // AddBeforeSelf & AddAfterSelf person.AddBeforeSelf(new XElement("person", new X...

.NET 暂无评论 阅读(2,406)

借助委托实现方法嵌套

C# 并不支持方法嵌套,也就是说我们不能写出下面这样的代码。 void Test() { void Inner(int x) { } Inner(123); } 但某些时候,方法嵌套却非常有用,比如说方法内的某些局部代码会被多个 "不连续" 区域调用。当然,我们可以将这些 "公用代码" 提取为类私有方法成员。但这么做有些 "别扭",或者说是 "不好看"。毕竟这些代码的使用者只有当前这个方法,将其作用域提升,有 "污染" 的嫌疑。借助于委托,我们很容易 "模拟" 出方法嵌套。 试验原型 static void Test() { var a = new[] ...

.NET 暂无评论 阅读(1,961)