C#中使用反射的性能分析(转)
最近在研究一个可配置系统的框架,在代码中大量使用了反射的方法,虽然借鉴到其他的语言,如java中反射性能都比较差,但是想到c#既然是一种强类型的语言,对于AppDomain中的类的调用应该性能不会差很多。 今天在mvp站点上看到有人说反射的性能很差,要避免使用,就写了一个简单的例子测试了一下 测试类如下: namespace ReflectionTest.Test { public class CTester { public CTester() { a = 10; } public void test1() { a = (a - 0.0001) * 1.0001; } private double a; public double geta() { return
C# 农历之二(转)
private DateTime m_Date; public DateTime Date { get{ return m_Date;} set{ m_Date = value;} } public CNDate() { Date = DateTime.Today; } public CNDate(DateTime dt) { Date = dt.Date; } //计算指定日期的星座序号 public int GetConstellation() { int Y, M, D; Y = m_Date.Year; M = m_Date.Month; D = m_Date.Day; Y = M * 100 + D; if (((Y >= 321) && (Y <= 419))) { return 0;} else if ((Y >= 420) && (Y <= 520)) { return 1;} else if
在C#中加载自己编写的动态链接库(转)
一、发生的背景 在开发新项目中使用了新的语言开发 C# 和新的技术方案 WEB Service,但是在新项目中,一些旧的模块需要继续使用,一般是采用 C 或 C++ 或 Delphi 编写的,如何利用旧模块对于开发人员来说,有三种可用方法供选择:第一、将 C 或 C++ 函数用 C# 彻底改写一遍,这样整个项目代码比较统一,维护也方便一些。但是尽管微软以及某些书籍说,C# 和 C++ 如何接近,但是改写起来还是很痛苦的事情,特别是 C++ 里的指针和内存操作;第二、将 C 或 C++ 函数封装成 COM,在 C# 中调用COM 比较方便,只是在封装时需要处理 C 或 C++
C# 农历之一(转)
using System; namespace CNCalendar { public class CNDate { private const ushort START_YEAR = 1901; private const ushort END_YEAR = 2050; private string[] ConstellationName = { "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座", "水瓶座", "双鱼座"}; private string[] LunarHolDayName = { "小寒&quo
用C#开发第一个WINDOWS应用程序(C#学习笔记之二)(转)
WINDOWS应用程序是靠消息驱动的,在VC中我们通过CLASSWIZARD可以为某窗口类添加消息处理函数,CLASSWIZARD将为你添加消息映射,对于WINDOWS消息,生成的消息处理函数重载了基类的虚拟方法。而在C#中如何处理消息呢?本文针对VS.NET BETA1环境下的C#简单地介绍WINDOWS消息以及自定义消息的处理方法。 示例代码下载 17K http://www.vckbase.com/study/article/csharp/msgapplication.zip 一、生成一个名为MSGApplication的工程 工程的建立方法请参考:C#学习笔记之一 二、处理WM_PAINT消息 我们以WM_PAINT消息的处理为例,在C#中处
C#的多线程能力(转)
线程是允许进行并行计算的一个抽象概念:在另一个线程完成计算任务的同时,一个线程可以对图像进行更新,二个线程可以同时处理同一个进程发出的二个网络请求。我们在这篇文章中将重点讨论Java和C#在线程方面的不同之处,并将一些Java中线程的常用模式转换为C#。 从概念上讲,线程提供了一种在一个软件中并行执行代码的方式━━每个线程都“同时”在一个共享的内存空间中执行指令,(当然是在一个处理器上,这是通过处于运行状态的线程的交替执行完成的。),因此,每个线程都可以访问一个程序内的数据结构。由于这种原因,多线程编程的难
用C#开发第一个WINDOWS应用程序(C#学习笔记之一)(转)
读者层次:初级、中级 前言:C#是一门现代的编程语言,包含在Visual Studio .Net 7.0中。它简化了C++的复杂性,保持了灵活性,对于学过C++的人来说很容易上手。写本文的时候Visual Studio .net 7.0 Beta1已经发布,本文即针对此版本做一些简单的开发尝试。 示例代码下载 18K 一、创建工程 如图所示,在集成开发环境的File菜单中选择New->Project打开新建工程对话框 我们选择工程类型为Visual C# Projects,在模板中选择Windows Application, 在Name处输入工程名称:HelloWindows,在Location中输入保存的路径。
使用 C#: 打开包装(转)
请访问 MSDN 源代码中心,下载本专栏文章中示例的源代码(英文)http://msdn.microsoft.com/code/default.asp?URL=/code/sample.asp?url=/MSDN-FILES/026/002/254/msdncompositedoc.xml。 上个月,我们介绍了装箱和取消装箱的方法,以及什么时候会用到它们。这个月,我们将研究装箱对性能的影响,以及我们应当怎样将这种影响减少到最小。 装箱和性能 由于进行了装箱,所以 C# 中的对象模型非常简单明了。但是采用经过装箱的数值类型会导致性能的降低。在大多数情况下,对象模型的简化比性能的降低更为重要。对于一般的软件而言的确
c#重点知识详解(六:线程)(转)
如同java一样,在c#中写一个多线程应用是非常简单的,本章将介绍如何在c#种开发多线程程序。在.net中线程是由System.Threading 名字空间所定义的。所以你必须包含这个名字空间。 using System.Threading; 开始一个线程 System.Threading 名字空间的线程类描述了一个线程对象,通过使用类对象,你可以创建、删除、停止及恢复一个线程。创建一个新线程通过new 操作,并可以通过start()方法启动线程 thread = new Thread(new ThreadStart(HelloWorld)); thread.Start(); 注意:和java程序不同,创建新线程并调用sta
c#语言重点知识详解(四:加框与解框)(转)
第四章:C# 中的加框与去框 C# 运行时中有两种类型:引用类型(reference)(在 C# 中用类声明)和值类型(value)(在 C# 中用结构声明)。引用和值类型在几个重要方面有所不同。值类型“感觉上”象一个数据。它包括预定义数值类型(如int、bool)以及用户定义的类型(circle、Point等)。如上文所述,值类型的变量是实际的值,所以在您使用变量时,通常处理的是实际的值。 1>:首先,让我们来看一看值类型(value)(在 C# 中用结构声明)。 对于任何类型的非框机构都又如下的形。 //------------------------------------- st
c#重点知识详解(三)(转)
第三章: 类属性 使用过RAD开发工具的一定inspector很熟悉,程序员通过它可以操作对象的属性,DELPHI中引入了PUBLISH关键字来公布对象属性受到程序员的普遍欢迎.通过存取标志来访问private成员,在c#中有两种途径揭示类的命名属性——通过域成员或者通过属性。前者是作为具有公共访问性的成员变量而被实现的;后者并不直接回应存储位置,只是通过存取标志(accessors)被访问。当你想读出或写入属性的值时,存取标志限定了被实现的语句。用于读出属性的值的存取标志记为关键字get,而要修改属性的值的读写符标志记为set。 类属性 只能
C#重点知识详解(二)(转)
第二章 内存管理 c#内存管理提供了与java一样的自动内存管理功能,让程序员从繁重的内存管理中摆脱出来,内存管理提高了代码的质量和提高了开发效率。 c#限制了着指针的使用,免除了程序员对内存泄漏的烦恼,但是不是意味着向java程序员一样c#程序员在也不能使用指针代来的好处。微软在设计C#语言时考虑到这个问题,在一方面抛弃指针的同时,另一方面采用折衷的办法,通过一个标志来时程序引入指针。 首先我们来了解自动内存管理 public class Stack { private Node first = null; public bool Empty { get { return (
C#重点知识详解(一)(转)
前沿 在微软的.NET推出后,关于C#的有关文章也相继出现,作为微软的重要的与JAVA抗衡的语言,C#具有很多优点。本文将选一些C#语言中的重要知识详细介绍, 第一章:参数 1。1 IN 参数 c#种的四种参数形式: 一般参数 in参数 out参数 参数数列 本章将介绍后三种的使用。 在C语言你可以通传递地址(即实参)或是DELPHI语言中通过VAR指示符传递地址参数来进行数据排序等操作,在C#语言中,是如何做的呢?"in"关键字可以帮助你。这个关键字可以通过参数传递你想返回的值。 namespace TestRefP { using
利齿C sharp代替C++(转)
现在,对于一个正在进行项目开发的公司来说,选择一门Windows下的开发语言已经不再像以前那么容易。C++曾经是商业开发最好的选择,但是现在,开发者们已经没有时间,也没有耐心一遍遍重复“编写代码——编译——排错”这样一个无休止的循环,也不再想去一次次地修补多年前编制的程序里的漏洞,他们已经厌倦了这一切。虽然Windows下的C++编程相对来说比较容易,但网络时代的飞快节奏已经不允许他们慢条斯理地跟自己的开发工具较劲。他们需要一个高效的、安全的开发工具。 相对于C++而言,Java的优势是开发周期短、代码安全(因为没有指
Beginner with C# 7(转)
1。7 语句(statements) c#借用了c/c++大多数的语句方法,不过仍然有些值得注意的地方。还有些地方是有所改动的。 在这里,我只提一些c#特有的东东。 1。7。10 “foreach”语句 “foreach”语句列举一个集合内的所有元素,并对这些元素执行一系列的操作。还是看看例子吧:*/ using system; using system.collections; class test { static void writelist(arraylist list) { foreach (object o in list) { int i = (int) o;//如果是for语句,这里一定会报错! console.writeline(0); console.wr
Beginner with C# 6(转)
赶出一编!请指正! 1。6 统一系统类型(type system unification) c#独创了一种类型——统一系统类型(为了这个累刑,我头疼死了。谁有更好的名字,请务必告诉 我)。总之,所有的其他类型,包括值和引用,都可以被当作统一系统类型来对待。从概念上说, 所有的类型都从它派生。这样,其他的类型就可以使用统一系统类型的属性和方法。包括一些“简 单”类型,如:int。还是给个例子吧:*/ using system; class test { static void main() { console.writeline(3.tostring()); } } /*“3.tostring()”调用了
More Effective C++之考虑变更程序库(转)
程序库的设计就是一个折衷的过程。理想的程序库应该是短小的、快速的、强大的、灵活的、可扩展的、直观的、普遍适用的、具有良好的支持、没有使用约束、没有错误的。这也是不存在的。为尺寸和速度而进行优化的程序库一般不能被移植。具有大量功能的的程序库不会具有直观性。没有错误的程序库在使用范围上会有限制。真实的世界里,你不能拥有每一件东西,总得有付出。 不同的设计者给这些条件赋予了不同的优先级。他们从而在设计中牺牲了不同的东西。因此一般两个提供相同功能的程序库却有着完全不同的性能特征。 例如,考虑iostrea
使用c#捕获windows的关机事件(转)
在公司上班,下班时需要签退,而我呢隔三差五就会忘那么一次。怎么办呢,于是就想能不能捕获windows的关机事件,做一个程序让它在关机的时候提醒我一下呢。 非常幸运很容易就找到了Microsoft.Win32命名空间下面的SystemEvents类,他有一个静态的事件SessionEnding在系统注销或者关机时发生,此事件只有在winform的程序下有效,而在控制台程序下面无效,不能激发事件;还有一点我们必须在程序推出时将加上的事件移除掉,否则就容易造成内存溢出。 关键代码如下:以下是引用片段: using System; using System.Collections.Gen
VS2005(c#)项目调试问题解决方案集锦之十五(转)
28.该项目中不存在目标“ResolveKeySource”。 原因:这个问题很罕见,查询国外相关资料后,大致说是由于部署的不是一个标准的solution, 需要在VS自带的命令提示中运行下面这个东西恢复 解决方法: (1).将下列代码存为XML文件,命名为TestBuild.xml以下是引用片段:<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <TargetConnectionString>Data Source=.sql2005%3BUser ID=SqlUser%3BPooling=False%3BPass
VS2005(c#)项目调试问题解决方案集锦之十四(转)
25.Error spawning 'cmd.exe'. 解决方案:把cmd.exe 拷贝到VS安装目录下的VC/BIN目录里,可以解决问题。 26.尝试读取或写入受保护的内存 解决:硬件有问题,一般内存有问题 27.无法在证书存储区中找到清单签名证书 解决方法:用记事本打开项目的.csproj文件,删除类似[@more@]