摘要:PerformanceNow that we have a basic model for how things are working, let's consider some things that could go wrong that would make it slow. That wil...
阅读全文
摘要:Stackoverflow用的是.net开发的,用的缓存是Redis,Stackoverflow架构的演讲地址是:http://www.infoq.com/cn/presentations/architecture-of-stackoverflow?utm_source=infoq&utm_medi...
阅读全文
摘要:NET平台很棒。真的很棒。直到它不再那么棒。我为什么不再用.NET?简单来说,它限制了我们选择的能力(对我来说很重要),转移了我们的注意力,使得我们向内认知它的安全性,替代了帮助我们认知外面广阔世界的所有可能性。[系好安全带:这个文章的长度几乎成了一本书…]优点首先让我开始说说.NET做得对的许多事...
阅读全文
摘要:如果我们想对外发布RESTful API,可以基于ASP.NET来构建Restful APIs,但需要部署IIS吗?答案是不必。你可以把它托管到一个Windows Service。具体如何把WEB API自托管到Windows Service可以参考这一文章:Self-Host a Web API (HttpSelfHostServer) (C#). 基本上照着一步步做就行了。例子里是基于Windows Console Application,同样可以Self-Host到Windows Service.问题在于如何把Controllers从Windows Service分离?可以使用autoF
阅读全文
摘要:先说下异步(Asynchronous)和多线程(Multi-threading)的区别:异步是相对与同步来说的,一般来说意味着非阻塞;异步在具体实现上是用多线程来实现的,但好处是你不用操心和管理多线程,它给你封装了一个干净的接口来调用。当然,在linux和javascript环境下,你要理解异步一般要理解事件驱动机制/Event loop: 《理解Event loop》。这里讲的主要是.NET。同步函数异步化有很多好处,但异步化是有开销的:《Understanding the Costs of Async and Await》。具体来说,下列场合适合用异步化:耗时的I/O操作,例如:读文件I/
阅读全文
摘要:今天有空,总结一下.NET 4.5并行库(TaskParallelLibrary)用法。也许C和C++的程序员刚刚开始写C#还习惯于new Thread来新建一个线程,但新建线程需要内存和CPU上下文切换的开销,200,000个周期,销毁线程也需要100,000个周期;所以还需要实现一个线程池Threadpool。自从有了并行库(TaskParallelLibrary),这些都不需要了。使用Task.Factory.StartNew(() => DoSomething(item));可以创建一个线程并自动由线程池管理。写法非常简单,但其实里面误区很多:1. Task.Factory.St
阅读全文
摘要:今天有空,小结一下RestSharp的用法。RestSharp内置了XML和JSON的反序列化(deserializers )。application/json – JsonDeserializerapplication/xml – XmlDeserializertext/json – JsonDeserializertext/xml – XmlDeserializer* – XmlDeserializer (all other content types not specified)比如下面的实体类:Public class Employee { Public string Emplo...
阅读全文
摘要:今天有空,把C#常用的功能总结一下,希望对您有用。(适用于.NET Framework 4.5)1. 把类转换为字符串(序列化为XML字符串,支持xml的namespace)using System.IO;using System.Text;using System.Xml;using System.Xml.Serialization;public static string Serialize(T t, string nameSpacePri, string nameSpace){ try { var myNamesp...
阅读全文
摘要:Linq-to-SQL的性能优化,根据我的个人实践和效果降序排列,如下.....
阅读全文
摘要:在使用C#的不对称加密RSACryptoServiceProvider类的时候,会遇到异常:System.Security.Cryptography.CryptographicException: The data to be decrypted exceeds the maximum for this modulus of 128 bytes. 异常详细信息: System.Security.Cryptography.CryptographicException: 要解密的数据超过此模块的最大值 128 字节。错误发生在rsa.Decrypt这一行......
阅读全文
摘要:实现写日志Logging,但客户不想用Log4net,说不想用任何第三方组件,好吧,我们自己写一个简单的记日志的组件吧。但要实现下面的几个功能: 可以用FileAppender的方式记日志....
阅读全文
摘要:在Remoting客户端用TcpChannel链接服务端的时候,如果地址不存在会尝试连接到超时Timeout大概21秒左右,例如连接到"tcp://192.192.192.192:8080/Serve...
阅读全文
摘要:本文主要讲述ASP.NET调用多Endpoint多Contract的WCF Service,包括以下实现: ASP.NET调用WCF Service WCF Service Libra...
阅读全文
摘要:用Resharper的同学都知道,如果你写了一个私有函数,这个函数没有访问类里面的其他参数和方法,那么它建议你标记这个方法为私有静态方法,提示是这样的: 值得这样做吗?看看微软的建议: ...
阅读全文
摘要:本文讲述实现抽象出来的异步通知回调进度通知,用在多层组件中,支持一组task的任意进度回调通知。本文中用到几个.NET 4.0的新方法和TPL方法:Tuple,ConcurrentQueue,Sema...
阅读全文
摘要:按CTRL+SHIFT+F (Find in files),勾上支持正则表达式,然后输入搜索内容: ^:b*[^:b#/]+.*$#开头和/开头或者空行都不计入代码量。如果需要只统计代码文件的代码量...
阅读全文
摘要:我们经常会写EventHandler += AFunction; 如果没有手动注销这个Event handler类似:EventHandler –= AFunction 会内存泄露吗?会! 这个Eve...
阅读全文
摘要:对一个Dictionary<TKey, TValue>进行键排序可以直接用SortedDictionary, SortedDictionary<TKey, TValue> 泛型类是检索运算复杂度为 O(log n) 的二叉搜索树,其中 n 是字典中的元素数。 就这一点而言,它与 SortedList<TKey, TValue> 泛型类相似。 这两个类具有相似的对象模型,并且都具有 O(log n) 的检索运算复杂度。这两个类的区别在于内存的使用以及插入和移除元素的速度:SortedList<TKey, TValue> 使用的内存比 SortedD
阅读全文
摘要:GC对象回收机制一个对象会不会被回收,主要看垃圾回收器引用遍历的时候能不能访问到这个引用,如果访问不到,则将被回收,如果能够访问到,则不能回收。也就是说GC回收前GC会确定对象没有任何引用。GC对“无用”对象的识别机制就是判断对象是否被“根(Root)”所引用。在这里,“根”是对一组当前正被使用,或者以后可能被使用的对象的统称,大体包括这样的对象:类型的静态字段或当前的方法参数和局部变量、CPU寄存器等。如何确定对象已经被释放而没有内存泄露使用ANTS Memory Profiler(Redgate)这个工具,把程序运行起来,打开一个Form,然后拍一张快照;关闭那个Form,再拍一张快照,两
阅读全文