C#基础原理拾遗——引用类型的值传递和引用传递
    
            
摘要:C#基础原理拾遗——引用类型的值传递和引用传递以前写博客不深动,只搭个架子,像做笔记,没有自己的思考,也没什么人来看。这个毛病得改,就从这一篇开始… 最近准备面试,深感基础之重要,奈何我不是计算机科班出身,基础方面有些捉襟见肘。短期怎么补?做面实题呗。遇到哪儿没理解透,自己查资料,印象深刻。这个问题就是这么来的。原题很简单:“对于方法,参数传递分为值传递和____两种。”这还不简单,但我得拓展啊,得思考啊… 以下1、2是我的意淫,但记录自己的一些错误想法并思考改正还是有益处的,希望不会对大家有误导。觉得麻烦的话可以直接看3。1、什么是值传递和引用传递? 我一开始的理解是,值类型根本没有引用啊,
        
阅读全文
摘要:C# web访问mysql数据库-整理归纳总结基本对比使用方式使用场合优缺点是否需要安装需要的dll网址引用方式程序内引用程序初期确定使用MySql,前期添加引用大多数情况下使用在类文件内,多数使用于aspx,ashx等带有后置代码的类文件中可以安装,也可以直接引用dll 多数情况下直接引用即可Connector/Net 6.7.4web.config引用后期维护接口发现程序内需要使用,这时不方便更改原有程序引用多数时候使用于没有后置代码的aspx、ashx等文件上ODBC方式配置系统内数据源程序创建初期,后期均可以使用适用于页面文件(aspx、ashx),也适用于带有后置代码的类文件(asp
        
阅读全文
摘要:.NET对象占内存多少一直有一个小小的疑惑——.NET一个对象或者一个集合占多少内存?有没有很快速的方法获取,而不是简单的估计分析对象大小?查了MSDN,和一些其他人的分析,得到解决是托管代码对象的大小无法真实的得到,因为存在托管对象转化成非托管的CRL优化。但我仍然不死心,非要弄个究竟!好吧,最终得到一些结果了。sizeof关键字,用于获取值类型的大小,如int(占4个字节),char(2个字节);并且sizeof 运算符仅适用于值类型,而不适用于引用类型。所以针对对象改关键字无法使用。查阅msdn,发现对象Marshal.SizeOf 方法,解释为返回类的非托管大小;但是仍然不能使用,因为
        
阅读全文
摘要:C#开源磁盘/内存缓存引擎前言昨天写了个 《基于STSdb和fastJson的磁盘/内存缓存》,大家可以先看看。下午用到业务系统时候,觉得可以改进一下,昨晚想了一个晚上,刚才重新实现一下。更新1. 增加了对批量处理的支持,写操作速度提升5倍,读操作提升100倍2. 增加了一个存储provider,可以选择不用STSdb做存储,而用物理文件/Dictionary。3. 增加了对并发的支持需求业务系统用的是数据库,数据量大,部分只读或相对稳定业务查询复杂,每次页面加载都要花耗不少时间(不讨论异步),觉得可以做一下高速缓存,譬如用nosql那种key/value快速存取结果目的提供一个简单易用的解决
        
阅读全文
摘要:C#制作高仿360安全卫士窗体开始写这一系列博客之前先要向大家说声抱歉,放肆雷特建立很久却很少有更新。当然博客人气也不旺,大部分都是看的人多评论收藏的人少。一直想要改变这种状态,正好赶上了最近工作上做了一个高仿360安全卫士窗体。所以将开发历程分享出来,一来希望能和大家交流共同学习成长;二来希望自己的放肆雷特能有人光顾。这一系列的文章所用到的技术首先要感谢苏飞大哥,我也是在很早以前看了他的QQ皮肤制作文章之后得到的灵感和一些相关知识。在这里帮他的C#论坛打个广告,里面有不少比较有用的资料。苏飞大哥也是很用心的打理这个论坛,论坛地址http://www.sufeinet.com/。说了这么多也该
        
阅读全文
摘要:分享.net常见的内存泄露及解决方法关于内存泄漏的问题,之前也为大家介绍过,比如:《C++中内存泄漏的检测方法介绍》,是关于C++内存泄漏的。今天为大家介绍的是关于.NET内存泄漏的问题。 前段时间帮项目组内做了一次内存优化,产品是使用c#开发的winForm程序,一直以为.net提供了垃圾收集机制,开发的时候也没怎么注意内存的释放,导致最后的产品做出来之后,运行一个多小时就内存直接崩溃了,看来.net的垃圾收集还是得需要开发者加以控制,也不是万能的啊。 下面将对垃圾收集做以简介,然后描述一下我在内存优化过程中常见的内存泄露及解决方法。 托管堆的内存分配(下文中的托管堆指的是GC堆) ...
        
阅读全文
摘要:Winform 单实例运行前言 前两天在博客园看到《如何防止程序多次运行》,文章写的很好,最后还留下一个问题给我们思考。关于Winform的防止多次运行,曾经也想研究过,但是后来工作上没有需要,于是就放弃了研究,这两天找资料,将其封装了一下,最后实现的效果为:Winform程序运行后,再次点击exe,会将Winform显示出去,若该窗体被其他窗体遮挡,则将其前置,若该窗体被最小化至托盘,将其显示并前置。原理 使用命名事件,进程在此启动时,前一个进程会收到通知,并做出回应。using System;using System.Collections.Generic;using System...
        
阅读全文
摘要:看到他我一下子就悟了-- 反射(1)反射(reflection)是一种允许用户获得类型信息的C#特性。术语“反射”源自于它的工作方式:Type对象映射它所代表的底层对象。对Type对象进行查询可以获得(反射)与类型相关的信息。反射是一种功能强大的机制,它允许学习和使用只在运行时才能知道的类型功能。 这些是官方定义,其实说白了,反射就是能知道我们未知类型的类型信息这么一个东西.没什么神秘可讲!反射的核心是System.Type。System.Type包含了很多属性和方法,使用这些属性和方法可以在运行时得到类型信息。一旦得到类型信息,就可以调用其构造函数、方法和属性。因此,反射允许使用编译时不可.
        
阅读全文
摘要:C# Socket编程闲着无聊,写了个简单的C/S Socket程序,功能很简单,服务器在9000端口监听socket接入,只要有接入,就发送"Welcome."消息给客户端。代码分2块,server端:class Program { static void Main(string[] args) { TcpListener lsner = new TcpListener(9000); lsner.Start(); Console.WriteLine("started in port: 9000...
        
阅读全文
摘要:C#新功能--命名参数与可选参数可能是篇幅太短了,又被打入冷宫了.先重发一篇加上可选参数.本来不想加这个呢,因为可选参数可能大家用的会多点.其实这两个在VB中早就有了,在C#中,只有在.net4以后才能使用.看到这个比较兴奋,我想大家也有好多人不知道,所以就强烈的想与大家分享一下.一、命名参数 命名参数会潜在的改变编写代码的方式.这个新功能能使代码更容易阅读和理解.例如,看一下System.IO名称空间中的File.Copy()方法,它一般构建为File.Copy(@"C:\mytestFile.txt",@"C:\myOtherFile.txt",tr
        
阅读全文
摘要:.NET开发中经常用到的扩展方法整理一下自己经常用到的几个扩展方法,在实际项目中确实好用,节省了不少的工作量。1 匿名对象转化在WinForm中,如果涉及较长时间的操作,我们一般会用一个BackgroundWorker来做封装长时间的操作,给它传递一个类型参数。var parm = new { UserId = txtUserId.Text, UserText = txtText.Text, TabIndex = tabControl.SelectedIndex, CheckUrl = urls, SupportFormat = supportFormat, DeleteMHT = chkDe
        
阅读全文
摘要:多线程下访问控件的方式(您一定会用到,附源码啦!)前言 在很多情况下,我们都会使用到多线程,在使用多线程的时候,我们很多时候又会去访问控件,这里面就会出现很多问题!!!我以一个最常见的,我们经常会用到的例子来讲讲,在提高自己水平的同时,希望能给大家带来一些方便,有不对的地方还请留言告知,以便及时更正自己的错误思想,先谢谢啦!1、多线程使用 有时候在执行一段程序时会耗时比较长,这时候会发现,我们的窗体就拖不动了,就像卡死了,但那段耗时程序执行完之后,就恢复OK了,这就是我们常说的程序假死!代码如下:View Code private void btnCalculate_Click(object.
        
阅读全文
摘要:一个基于STSdb和fastJson的磁盘/内存缓存需求业务系统用的是数据库,数据量大,部分只读或相对稳定业务查询复杂,每次页面加载都要花耗不少时间(不讨论异步),觉得可以做一下高速缓存,譬如用nosql那种key/value快速存取结果目的这里不是要做一个大家都适用的磁盘/内存缓存库,这个做法,部分是展示STSdb的用法,部分是提供一个简单易用的解决方案。磁盘/内存为什么不用memcached或者AppFabric Cache这样的现成解决方案呢?因为业务要缓存的内存或大或小,小的几KB,大的几MB,如果用户一多,势必对内存有过度的需求。所以选择做一个基于磁盘的。当然,这个解决方案是支持内存
        
阅读全文
摘要:递归获取XML元素看到的一道题,用递归获取XML元素.... static void Main(string[] args) { string xmlContent = @" ...
        
阅读全文
摘要:自定义Windows性能监视器Windows性能监视器是一个很好用的自带监视工具,对于一些基本简单的监视需求可以轻松满足。本文主要总结了一下如何将自己应用中的一些性能数据暴露到性能监视器上方便管理。什么?不知道什么是Windows性能监视器?“Microsoft管理控制台(MMC)管理单元,提供用于分析系统性能的工具。仅从一个单独的控制台,即可实时监视应用程序和硬件性能,自定义要在日志中收集的数据,定义警报和自动操作的阈值,生成报告以及以各种方式查看过去的性能数据。”- MSDN[1]使用场景需要记录自己开发的应用中一些性能方面的数据,比如说我有一个WCF的应用,我需要记录下来每分钟应用处理的
        
阅读全文
摘要:运用Mono.Ceci类库修改.NET程序集 走上破解软件的道路代码注入在C++时代很流行,主要是对现有的程序做一些修改,以达到预期的目的。一部分的破解程序,注册机也是借助于此方法,让被注入的程序绕过验证,达到破解的目录。在.NET中,借助于Mono.Cecil程序集,注入代码也相当容易。请看下面的代码,将要被注入的程序:using System;namespace Victim{ class Program { static void Main(string[] args) { Console.WriteLine("Hello W...
        
阅读全文
摘要:Winform常用开发模式第一篇上一篇博客最后我提到“异步编程模型”(APM),之后本来打算整理一下这方面的材料然后总结一下写篇文章与诸位分享,后来在整理的过程中不断的延伸不断地扩展,发现完全偏离了“异步编程”这个概念,前前后后所有的加起来完全可以写一篇关于框架原理的东西,而“异步编程”只是其中的一小部分,后来我一狠心,打算把所有的都包含进来写出来,希望给诸位带来帮助。 文章开始之前,先了解几个概念:一、回调方法。这个概念想必都很清楚,被系统调用的方法就叫做“回调方法”。是的,描述的没错,通常我们注册一个事件,事件处理程序就属于“回调方法”。可是不知道诸位有没有想过,我们在编程过程中,哪些不.
        
阅读全文
摘要:基于HttpModule的简单.NET网站授权方案摘要 本文介绍一种入门级的网站授权(注:这里所指的授权指的是注册码效果,而不是网站登陆时的身份授权)方案,仅供学习交流及对付小白客户使用。复杂的网站授权涉及网站加密等一系列复杂的技术,不做本文介绍内容。(如果有好的开源的项目,还请各位大大们不吝赐教)功能说明 网站发布时,做一个授权处理是非常有必要的。可以有效防止客户直接把你发布的网站直接COPY到别的电脑上,经过简单的配置就直接可以运行。记得在学校做网站时,当时对HTTP请求没研究过,直接在任何一个页面加载时强制验证。这样做出来的功能可移植性很差。于是,写下此文给新手一个指引。本方案可以灵..
        
阅读全文
摘要:解析JSON、扩展Fiddler按文章结构,这部分应该给出WCFRest项目示例,我想WinForm示例足够详尽了,况且WCFRest还不需要使用插件AppDomain那一套,于是把最近写的Fiddler扩展搬上来吧。Fiddler有一套自成的插件系统,可以在其官方网站找到完整文档(戳这里)。通过其提供的一整套接口,我们可以从界面至功能全方位扩展它。这里主题简单,我们只为其添加一个JSON解析界面。PART I:JSON解析Mgen有一个JSON解析范例(戳这里)代码相当好看,WPF模块绑定也很强大。这里使用Json.com的一个示例稍作修改,解析效果如下:上述代码过于忠实地体现了Newton
        
阅读全文
摘要:字符串反混淆实战 Dotfuscator 4.9 字符串加密技术应对策略因为手头需要使用一个第三方类库,网络上又找不到它的可用的版本,于是只好自己动手。这个类库使用了Dotfuscator 加密,用.NET Reflector加载程序集,看到的字符串是乱码,如下面的代码例子所示:internal class Program{ // Methods private static void Main(string[] args) { int num2 = 4; try { List expressionStack_5...
        
阅读全文