如何查找.NET程序内存不断上涨的原因(CLRProfiler)
    
            
摘要:前段时间公司新写的自动升级服务端(Remoting)出现了内存不断飙升的情况,从最初的七八十兆一晚上竟然飙到了1G多,直接导致客户端连接服务端失败,这不科学,后来优化了各种可能造成占用内存的方法(数据库连接,I/O操作,引用类型释放),但效果不佳,这下可难为我们了,不知道问题的所在也就不知道该如何去修改。我们知道.NET是带有垃圾回收机制的,出现这种情况一般是由某些数据长期存活在内存中又不能被当成垃圾数据回收的原因造成的。后来就在各搜索引擎上进行了各种搜索,有说使用windebug分析dump,但需要大量时间琢磨,有人说是不是硬件问题,还有人说中毒了,最后找到了一款微软推出的CLRProfil
        
阅读全文
摘要:前面我写过7篇文章粗略的介绍了一下Rx及其方方面面。Rx是一个好东西不然我也不会费这么大的力气来写这些东西。本文打算初略的讲一下传统异步编程方法的缺点,以及为啥Rx能够给异步编程带来新的体验。最后我听译了一篇关于Reactive Extension的非常好的一篇演讲,并制作了中英文字幕。希望大家看完这篇文章之后能够对Reactive Extension能够有比较深的印象,并在实际编程中遇到比较纠结的异步编程问题了能够想到Rx。1. 传统异步编程存在的问题 异步编程比较困难,这一点老赵讲过很多次,在这里就我的理解有以下几点。1.1 异步编程的方式太多,缺乏统一性 在.NET下面做异步编程其实有很
        
阅读全文
摘要:最近很忙,既要外出找工作又要兼顾老板公司的项目。今天在公司,忙里偷闲,总结一下.NET中的异步调用函数的实现方法,DebugLZQ在写这篇博文之前自己先动手写了本文的所有示例代码,开写之前是做过功课的,用代码说话方有说服力。 本文的内容旨在用最简洁的代码来把异步调用的方法说清楚,园子里的高手老鸟可以绕行,不喜勿喷,非诚勿扰~ lz的前一篇文章简单的说了下异步,主要是从理解上来讲;这篇文章主要写具体的实现方法。实现异步编程有4种方法可供选择,这4种访求实际上也对应着4种异步调用的模式,分为“等待”和“回调”两大类。四种方法,我在代码中都进行了详细的注释,这里不罗嗦了,直接用代码说明吧第一种方..
        
阅读全文
摘要:当你批量操作数据的时候,常常会使用到update table1 from table2)的这种方式。这种方式是最简洁的。但当你从excel或者CSV文件更新海量数据时,再使用这种方法,那性能是不是好,字符串拼接又何其之多,大数据是不是需要分组更新?我不想去检测各种方法的速度,因为我个人比较认可以下方式,欢迎大家批评与指正。我需要使用到的类主要是SqlCommandBuilder。/// <param name="table">准备更新的DataTable新数据</param> /// <param name="TableName&qu
        
阅读全文
摘要:一些系统,需要能够发送短信,量很小,平均每日10条。运营商平台太贵,白名单很严格,小额只能发省内;各短信平台有各种限制,大事件前后会关闭;飞信以前可以用WAP发,但是现在多了验证码,搞不定了;短信猫买来还得写控制程序,价钱和时间上……手上有两部废弃的WM手机,没有故障,只是老旧不好用!有一个WM软件(后面有下载),它在WM手机上开启一个Http服务器,使得我们可以在PC上通过浏览器直接访问!有收发短信的功能!把手机WiFi性能跳到最大,关闭每x分钟限制自动关闭;软件设置自动开启服务,关闭“运行时防止休眠”(它设计上有BUG,这个会导致服务10分钟就关闭),拉到启动目录设为自动启动。OK!就是它
        
阅读全文
摘要:WPF做的小型音乐播放器-升级版对WPF越来越爱.今天早上看到一个开源的音乐播放器豆瓣电台,下载了源码尝试了一下,功能很强大,样式很漂亮(推荐对WPF有兴趣的童鞋也下载来试下,学习的好机会哦).可惜,他是基于事件驱动的,主窗口cs代码有2000多行,逻辑神马的虽然放在逻辑层,各个窗口又有强引用,还时不时的带着绑定,看着实在是累啊.楼猪一直醉心于MVVM模式,于是就想着怎么给改改.此处先郑重声明:我只是尽量用MVVM来实现和原作者相同的效果,界面素材均是直接从豆瓣电台照搬下来的.果断的建个项目,拖prism,建模块,花了一天时间,居然都可以运行听歌了,实在是佩服我的敲代码速度.先看下效果图:左侧
        
阅读全文
摘要:smarkhttp://www.ikende.com/Beetle可靠、高性能的.Net Socket Tcp通讯组件 支持flash amf3,protobuf,Silverlight,windows phone分享一个高效的String分割类 最近在制定一个网络文件交互的协议,协议制订上采用了HTTP协议的方式,因此需对协议数据进行一个分割处理;虽然使用String的Split方法可以达到目的,但通过反编译查看其代码后发现实现相对复杂,性能上也不怎样;于是自己实现一个简单的字符分割处理类,在实现后和String的Sqlit方法进行了一个简单的对比,发现性能要比Sqlit高所以分享出来...
        
阅读全文
摘要:通过网上汉字转换成拼音的代码,经过本人优化,性能将更加优异。下面将源代码贴出。[csharp]view plaincopypublicstaticclassChineseToPinYin{privatestaticreadonlyDictionary<int,string>CodeCollections=newDictionary<int,string>{{-20319,"a"},{-20317,"ai"},{-20304,"an"},{-20295,"ang"},{-20292,"
        
阅读全文
摘要:上一章用两种方法加载了 运动图片,图片跟随鼠标走xna可以放到wp7 xbox上,这次简单的碰撞就用键盘的上下左右四个键控制上下左右,直到碰撞完成。加载了两个静态图片,一个苹果和一个香蕉,是之前用wpf写消消看时候自己做的,这时候就拿来用用,香蕉自动移动,苹果用户可以用键盘控制 SpriteBatch spriteBatch; //一个随意移动的物体 Texture2D moveObject; //移动物体的位置 Vector2 moveVector=Vector2.Zero; //自己控制的物体 ...
        
阅读全文
摘要:通过使用异步编程,可避免出现性能瓶颈,并提高应用程序的整体响应。然而,技术编写异步应用程序的传统方法过于复杂,这使得异步程序难以编写,调试和维护。Visual Studio2012引入了一个简单的开发方法,异步编程,我们可以充分利用.NET Framework 4.5 和 Windows Runtime中对异步的支持。这项复杂的工作将会交由编译器来搞定,开发人员就像是在使用同步代码来编写应用程序的逻辑结构,但其结果是,得到了所有异 步编程的优点,但只要付出一点点工作。本主题简要介绍何时以及如何使用异步编程,其中包括支持说明本主题的例子。由此下载VS2012.异步提高响应能力异步性必不可少,因为
        
阅读全文
摘要:多线程学习笔记第3篇 前言:这篇博客主要是在上一篇博客的基础上,继续记录了死锁,线程同步和线程池的一些知识,方便我以后继续的学习,在这里贴出来和大家共享一下1. 对象池技术模拟 (1) 如果一些对象创建非常消耗时间和资源,使用非常频繁,这时候可以考虑使用对象池技术 (2)对象池其实就是一个数组,当我们想用一个对象的时候直接从池子里面取,别的对象也可以从池子里面取 (3)使用代码模拟对象池Demo添加锁View Code (4)数据库模仿锁 1)select * from bank with(nolock) --表示当前表做查询的时候不加锁 (5)解决死锁的方法是操作资源的顺序一...
        
阅读全文
摘要:对于企业应用的开发者来说,异常处理是一件既简单又复杂的事情。说其简单,是因为相关的编程无外乎try/catch/finally+throw而已;说其复杂,是因为我们往往很难按照我们真正需要的策略来处理异常。我一直有这样的想法,理想的企业应用开发中应该尽量让框架来完成对异常的处理,最终的开发人员在大部分的情况下无需编写异常处理相关的任何代码。在这篇文章中我们将提供一个解决方案来让ASP.NET应用利用EntLib的异常处理模块来实现自动化的异常处理。源代码:Sample1[通过重写Page的OnLoad和OnRaisePostBackEvent方法]Sample2[通过自动封装注册的EventH
        
阅读全文
摘要:网站在开发的过程中需要实现多语言版本,我们暂且认为有英语和汉语两个版本。网站结构包括,UI过程,rest服务,以及相应的js,各个部分我们都要实现多语言,不要求一键切换,但是在部署过程中要能实现多与语言配置。首先我们出场的是资源文件,C#的项目实现本地化和区域化,我们要用到资源文件。添加资源文件夹添加资源文件项这里文件的命名最好能规范,如英文版本建议lang.en.resx,汉语版本建议用lang.zh-cn.resx实际使用效果资源文件夹由各个语言版本的资源文件组成,资源文件以.resx后缀和.cs后缀成对出现,其实质是一定规则的Xml文件。这个很容易理解,应用程序通过资源文件实现多语言版本
        
阅读全文
摘要:在很多软件系统中,都允许用户设置自己的头像,甚至可以直接使用摄像头照相作为自己的头像,就像QQ的自拍头像功能一样。 这种功能是如何实现的了?最直接的,我们可以使用Windows提供的VFW技术或DirectX技术来捕获摄像头采集到的视频和图片。但是,无论使用这两种技术中的哪一个,要实现一个兼容所有摄像头而又运行稳定的拍照功能,都不是那么容易。幸运的是,OMCS已经内置集成了这种功能的一个WinForm控件PhotoPanel,我们可以直接拿来使用。 PhotoPanel控件的主要接口如下图所示: /// <summary> /// 初始化摄像头,并启动它。 /// </sum
        
阅读全文
摘要:简介entity framework在vs中生成的.edmx文件,会导致摘要(说明)为空的bug,具体bug信息为“没有元数据文档可用。”,导致我们表名打点去字段时,无法预知字段代表的含义,这在开发当中也是比较致命的,因为开发人员只能靠经验和推测判断,表、字段的含义,而不能直观的第一时间知道他们的用途,给开发带来了很多的不变,下面是应对此bug的解决方案。用途表、字段摘要(说明)的主要用途,如图:【另说一下PowerDesigner添加字段说明的方法:http://www.cnblogs.com/stone_w/archive/2012/10/18/2729475.html】Bug解决方案方法
        
阅读全文
摘要:1. 多线程 (1) 进程(Process):是WIndows系统中的一个基本概念,它包含着一个运行程序所需要的资源,进程之间是相对独立的,一个进程无法直接访问另一个进程的数据(除非利用分布式计算方法),一个进程运行的失败也不会影响其他进程的运行,windows系统就是利用进程把工作划分为多个独立的区域,进程可以理解为一个程序的基本边界。 1)要解 决的问题:为了使程序能够并发执行(要并发处理就要隔离进程,使进程独立,即每个进程有属于自己的数据段,程序段,进程控制块) 2)进程是隔离不同应用程序的一种资源 3)进程Demo,代码如下: static void Main(st...
        
阅读全文
摘要:由于一直从事Web方面的开发工作,所以对Winform这块不太熟悉,今天接到一个新的需求,就是在一个C++程序里面需要上传一个文件到IIS服务器上面来,由于C++的C#的差异性,我们不能直接使用对象,所以我们决定采用字节流的方式来上传文件。由于只是一个测试程序,而且C++那边还没有开发完,所以我就贴了我C#这边的一段测试程序,原理是一样的。发送端代码,这里代码相对简陋,大家看看就可以了,需要的话可以自己优化 private void button1_Click(object sender, EventArgs e) { System.Net.W...
        
阅读全文
摘要:最近有同学面试的时候,被问了这么一道题:说有A,B,C三个盒子,其中只有一个盒子里面有宝贝,但是你不知道是哪个盒子。现在你随机的拿过来一个盒子,但是你自己不能看你拿的盒子里是否是宝贝。现在你的对手翻开了剩下的两个盒子中的一个,并且是空盒子,即里面没有宝贝。现在问你:是否要用你手里的盒子去换剩下的那个没有被翻开过的盒子?对于这个问题,可谓是争论不休。有人说不必要换,因为你手里的盒子是宝物的概率现在为1/2,和对手一样。又有一些人说,你手里的盒子是宝物的概率是1/3,而没有翻开的剩下的那个盒子是宝物的概率是2/3。同样一个问题,却有两种解释方法,并且看上去都有道理。那么为什么出现这种情况呢?如果我
        
阅读全文
摘要:上周写了一篇GridView多行多列合并单元格(完整代码和例子),实现的方法有很多不足之处,比如只能合并连续的列,不支持模板列。在今天的文章里,首先来解决第一个不足。解决这个问题的思路并不难,现有的代码已经解决了连续列的合并,合并指定的列只需将要合并的列按照顺序传递给合并的方法,就OK了!下面我给出合并指定列的代码: 1: /// <summary> 2: /// 合并GridView单元格 3: /// </summary> 4: /// <param name="gv">要合并的GridView</param> 5: //
        
阅读全文
摘要:最近要实现访问远程主机的共享目录中的一个文件。遇到了权限问题。google了一下,找到了几种解决方法,记录如下:一、调用Net use命令 // 使用方法: //if (Connect("192.168.1.48", "用户名", "密码")) //{ // File.Copy(@"\\192.168.1.48\共享目录\test.txt", @"e:\\test.txt", true); //} public bool Connect(string remoteHost, string use
        
阅读全文