.NET陷阱之五:奇怪的OutOfMemoryException——大对象堆引起的问题与对策
摘要:.NET陷阱之五:奇怪的OutOfMemoryException——大对象堆引起的问题与对策我们在开发过程中曾经遇到过一个奇怪的问题:当软件加载了很多比较大规模的数据后,会偶尔出现OutOfMemoryException异常,但通过内存检查工具却发现还有很多可用内存。于是我们怀疑是可用内存总量充足,但却没有足够的连续内存了——也就是说存在很多未分配的内存空隙。但不是说.NET运行时的垃圾收集器会压缩使用中的内存,从而使已经释放的内存空隙连成一片吗?于是我深入研究了一下垃圾回收相关的内容,最终明确的了问题所在——大对象堆(LOH)的使用。如果你也遇到过类似的问题或者对相关的细节有兴趣的话,就继续
阅读全文
Newlife XCode组件资源目录汇总【2013年版】
摘要:Newlife XCode组件资源目录汇总【2013年版】声明:此Newlife XCode非Mac的XCode,避免误会。日常用的Newlife X组件的相关资源,不限于XCode,只是以XCode组件为主:1.QQ群:16008002.博客 :http://www.cnblogs.com/nnhy/http://www.cnblogs.com/asxinyu/http://www.cnblogs.com/JangoJing/3.论坛:http://www.newlifex.com/index.aspx4.开源网站:http://xcode.codeplex.com/几点说明:1.此文将及时
阅读全文
Socket异步通信——使用SocketAsyncEventArgs
摘要:Socket异步通信——使用SocketAsyncEventArgs上一次的博文说错了东西,幸好有园友指出。才把错误改正过来,顺便也把利用SocketAsyncEventArgs进行Socket异步通信这方面的知识整理一下。 之前看了网上的代码,每进行一次异步操作都new 一个SocketAsyncEventArgs对象,然后网友评论太浪费资源了,于是就误以为用BeginXXX进行Socket异步通信会更优,幸好有园友指出我的误区,再看了这篇文章《net3.5与.net2.0 Socket性能比较》之后才发现SocketAsyncEventArgs是.NET Framework 3.5才出..
阅读全文
C#中Hashtable、Dictionary详解以及写入和读取对比
摘要:C#中Hashtable、Dictionary详解以及写入和读取对比在本文中将从基础角度讲解HashTable、Dictionary的构造和通过程序进行插入读取对比。 一:HashTable 1.HashTable是一种散列表,他内部维护很多对Key-Value键值对,其还有一个类似索引的值叫做散列值(HashCode),它是根据GetHashCode方法对Key通过一定算法获取得到的,所有的查找操作定位操作都是基于散列值来实现找到对应的Key和Value值的。 2.我们需要使用一个算法让散列值对应HashTable的空间地址尽量不重复,这就是散列函数(GetHashCode)需...
阅读全文
FTP文件操作之下载文件
摘要:FTP文件操作之下载文件FTP文件操作之上传文件前面写了采用ftp上传文件,有了上传怎么能够没有下载呢?如果只有上传没有下载,那上传了也没啥用了。所以今天就跟大家一起学习学习使用ftp下载文件。知道了怎么上传,那么下载也就变得很简单了,上传是把文件放到服务器,而下载是把文件从服务器取过来。一个是从本地读文件,然后写到服务器;另一个是从服务器读文件,然后写到本地。基本原理就是这样,下面我们看看具体的代码: /// <summary> /// FTP下载文件 /// </summary> /// <param name="userId">ft
阅读全文
C#异步TCP服务器完整实现
摘要:C#异步TCP服务器完整实现TCP异步Socket模型C#的TCP异步Socket模型是通过Begin-End模式实现的。例如提供BeginConnect、BeginAccept、BeginSend和BeginReceive等。IAsyncResult BeginAccept(AsyncCallback callback, object state);AsyncCallback回调在函数执行完毕后执行。state对象被用于在执行函数和回调函数间传输信息。Socket socket = new Socket( AddressFamily.InterNetwork...
阅读全文
自定义Unity生存期模型PerCallContextLifeTimeManager
摘要:自定义Unity生存期模型PerCallContextLifeTimeManagerPerThreadLifetimeManager的问题使用Unity内置的PerThreadLifetimeManager生存期模型时,其基于ThreadStatic的TLS(Thread Local Storage)设计,也就是说对于每个托管的ManagedThreadId,其会缓存已生成的对象实例。由于CLR维护了托管线程池,使用过的线程并不会立即销毁,在需要的时候会继续复用。在类似ASP.NET PerCall或WCF PerCall条件下,当Call1在线程ManagedThreadId1中处理完毕后,
阅读全文
Socket异步通信
摘要:异步这个词以前在课堂上也听过,那时候只是听,直到在做项目的时候用到多线程,在体会到异步是怎样的,到最近做的东西对异步更加深刻了,进程通信时调Windows API SendMessage和PostMessage的区别。最近搞的Socket编程也是有异步的,Socket当然要有异步才行,不然服务端Accept一次就卡一次在那里,客户端Connect一次就卡一次。每Send一次,Receive一次都会卡一次,这样不好。 在网上谷歌过一下,发现Socket的异步可以有两种方式,一种是用 SocketAsyncEventArgs 配合AcceptAsync,SendAsync,ReceiveAsyn.
阅读全文
.net 4.0 的Socket写的支持跨平台双工的轻量级通讯组件
摘要:NetworkSocket系列前言NetworkSocket是我从去年工作之余开始,基于.net 4.0 的Socket写的支持跨平台双工的轻量级通讯组件。组件体积小(约40KB)、通讯稳定、可扩展性高、调用方便;支持多种数据序列化方式,支持GZip数据压缩传输和DES数据加密传输。以下是该系列的小节1获取NetworkSocket2NetworkSocket类图3NetworkSocket命名空间4使用TcpServerBase构建服务器5使用TcpServerEx构建服务器6通过FastTcpServerEx构建服务器7为NetworkSocket扩展协议^_^精彩在后面......分类:
阅读全文
C#实现RTP数据包传输参照RFC3550
摘要:C#实现RTP数据包传输参照RFC3550闲暇时折腾IP网络视频监控系统,需要支持视频帧数据包在网络内的传输。未采用H.264或MPEG4等编码压缩方式,直接使用Bitmap图片。由于对帧的准确到达要求不好,所以采用UDP传输。如果发生网络丢包现象则直接将帧丢弃。为了记录数据包的传输顺序和帧的时间戳,所以研究了下RFC3550协议,采用RTP包封装视频帧。并未全面深究,所以未使用SSRC和CSRC,因为不确切了解其用意。不过目前的实现情况已经足够了。 1 /// <summary> 2 /// RTP(RFC3550)协议数据包 3 /// </summary> 4 /
阅读全文
对协变和逆变的简单理解
摘要:对协变和逆变的简单理解毕业快一年了,边工作边学习,虽说对.net不算精通,但也算入门了,但一直以来对协变和逆变这个概念不是太了解,上学时候mark了一些文章,今天回过头看感觉更糊涂了,真验证本人一句口头禅“知道的越多,知道的越少”。看到最后实在乱了,就干脆装糊涂好了,本人也算半个阴谋论者,在编程语言这方面当我实在没法吃透一个语法的时候,我就归咎于编译器这个幕后黑手。我们看下面两个类Derived派生自Base:public class Base{}public class Derived:Base{}我们都这知道下面这两行代码,第一行能编译通过,第二行则无法编译通过:Base b=new De
阅读全文
socket编程过程中
摘要:好多天前就想写的,可是拖延症暂时没药医。。。socket编程过程中,有几个前提(在UNP的前言以及第一章中有提到)。1.需要一定的编程语言基础,例如C语言;2.需要有一定的TCP/IP网络协议栈知识,至少知道TCP和UDP的连接和释放(话说UDP不需要连接);3.如果可能,最好对操作系统(例如Linux)有一定了解。然后,就可以开搞了。一般而言,socket编程分为客户端和服务端编程,socket提供在这两者之间进行信息交互。基本的流程如下:其中,read和write属于Linux/Unix下的系统调用,通常还可以用recv和send函数代替。这张图引用自UNP第四章,使用系统调用的原因主要是
阅读全文
System.Net.Http for Silverlight
摘要:System.Net.Http for SilverlightSystem.Net.Http 简介System.Net.Http 是微软推出的最新的 HTTP 应用程序的编程接口, 微软称之为“现代化的 HTTP 编程接口”, 旨在提供如下内容:用户通过 HTTP 使用现代化的 Web Service 的客户端组件;能够同时在客户端与服务端同时使用的 HTTP 组件(比如处理 HTTP 标头和消息), 为客户端和服务端提供一致的编程模型。命名空间System.Net.Http以及System.Net.Http.Headers提供了如下内容:HttpClient发送和接收 HTTP 请求与响应;
阅读全文
C#实现UDP分包组包
摘要:C#实现UDP分包组包场景介绍如果需要使用UDP传输较大数据,例如传输10M的图片,这突破了UDP的设计原则。UDP的设计是基于"datagram",也就是它假设你发送的每个数据包都能包含在单一的包内。并且设定UDP数据包的最大长度受基础网络协议的限制。UDP数据包的理论最大长度限制是 65535 bytes,这包含 8 bytes 数据包头和 65527 bytes 数据。但如果基于IPv4网络传输,则还需减去 20 bytes 的IP数据包头。则单一的UDP数据包可传输的数据最大长度为:MaxUdpDataLength = 65535 - 8 - 20 = 65507
阅读全文
“容器-组件-服务”模型
摘要:“容器-组件-服务”模型 我前面一篇博客讲了自定义窗体设计器,其实功能太简单,主要想阐述的是底层原理(虽然我不保证VS IDE设计器确实是那样去实现的)。编程讲究的是刨根问底,刨到祖坟最好,这篇或者可能以后几篇博客我想说一下VS IDE中的窗体设计器,虽说不能面面俱到,但也能让大家知道个大概。初学者可能阅读起来有些困难。其实回头一看,我之前的好几篇博客倒是跟窗体设计器有些关系,当时写的时候也没有想到说为了照顾以后要说的内容,算是凑巧,这其中包括系列(九)、系列(八)、系列(七)。我总结了一下,了解窗体设计器主要搞懂三个部分:1)“容器-组件-服务”模型;2)设计时(Design_Time)和运
阅读全文
]进程注入是王道之为NhibernateProfiler增加“附加到进程”功能-原理(源码)
摘要:[屌丝的逆袭系列]进程注入是王道之为NhibernateProfiler增加“附加到进程”功能-原理(源码) 上篇我们一起看了附加到进程这个功能实现后的样子,这篇我们就来讲一下他的实现原理。如果你还没有看过上一篇里的功能介绍的话,建议回去扫一眼,花不了二分钟的时间,要不然你继续往下看的话,会一头雾水的。 从上篇的演示中,我们不难看出,要实现附加到进程的功能,至少需要解决两个问题。 一.如何把HibernatingRhinos.Profiler.Appender.dll送到目标进程,并在这个进程里调用HibernatingRhinos.Profiler.Appender.NHibernate..
阅读全文
开源《热血传奇》服务端引擎
摘要:开源《热血传奇》服务端引擎(C#编写),可以顺利进行游戏热血传奇...曾经风靡一时的网络游戏..距离如今已经有10多年的历史了.这套代码是我通过代码转换工具转换过来加之修改之后可以顺利的进入游戏畅游砝码大陆。作为菜鸟的我能独立完成并修改代码中的BUG,实属不易...虽然早就完成了,放在手上很久没更新过了,干脆开源出来算了...代码里面部分字段和方法有注释.带来里面大量使用指针来完成与原来DELPHI写的程序交换数据。欢迎各位高手指教..代码下载地址:https://gameofmir.codeplex.com/数据库下载(需要MSSQL2008):http://files.cnblogs.co
阅读全文
Lync二次开发
摘要:应用程序说明基于Microsoft Lync强大功能之上,通过二次开发提供了个性化扩展功能,使用户可以实现Microsoft Lync客户端界面定制、Microsoft Lync功能扩展、 Microsoft Lync与第三方应用程序集成等功能,提供适应客户个性化需求的统一沟通平台。一、用户界面定制将Microsoft Lync客户端用户界面进行个性化修改,使其融入更多的企业个性元素及企业文化。 如将登陆界面原有微软字样的标题和LOGO等信息替换成企业独有的个性化界面等。二、IM个性化需求虽然Microsoft Lync提供了强大的IM(即时消息)平台,但客户还是有很多个性化需求需要通过二次开
阅读全文
FileSystemWatcher 简单使用
摘要:FileSystemWatcher 简单使用这里看一个文件夹下监测的例子。首先来看下MSDN上的备注信息。这里网址:http://msdn.microsoft.com/zh-cn/library/system.io.filesystemwatcher.aspx使用FileSystemWatcher监视指定目录中的更改。可监视指定目录中的文件或子目录的更改。可以创建一个组件来监视本地计算机、网络驱动器或远程计算机上的文件。若要监视所有文件中的更改,请将Filter属性设置为空字符串 ("") 或使用通配符(“*.*”)。若要监视特定的文件,请将Filter属性设置为该文件名。
阅读全文
C# 图像编程1
摘要:C# 图像编程 (1) 准备工作; 你好,空姐; 为空姐照片添加特效很久之前,就想写一系列C#图像编程的文章,但始终没有下笔,其主要原因有二:(1)我的C#图像处理库 Geb.Image 库在大幅度变动中;(2)没有找到一个很好的演示工具。现在,对于第一个问题,Geb.Image库的基本结构已经确定了;对于第二个问题,选择了LinqPad作为C#图像编程和演示工具,轻巧简便。就从现在开始吧。(1) 准备实验环境假设您熟悉C#编程,且电脑中有 32 位的.Net 4.0 环境。在此基础上,我们开始搭建C# 图像编程的实验环境。第一步:下载安装 LinqPad。LinqPad是一款小巧易用的C#代
阅读全文