您的位置:首页 > 运维架构 > 网站架构

2009年7月小记(WCF限流行为, 网站性能设置, 序列化的性能, 读取内嵌资源文件, WMI, declarative, XML声明, 相互转换)

2009-07-23 09:37 756 查看
www.facebuyer.com 买家面对面

1、WCF限流行为

限流“允许开发者限制客户端连接数以及服务的负荷。限流可以避免服务的最大化,以及分配与使用重要资源的最大化。引入限流技术后,一旦超出配置的设置值,WCF就会自动地将等待处理的调用者放入到队列中,然后依次从队列中取出。在队列中等待处理调用时,如果客户端的调用超时,客户端就会获得一个TimeoutException异常。每个服务类型都可以应用限流技术,也就是说,它会影响到服务的所有实例以及服务类型的所有终结点。实现方式是为限流与服务使用的每个通道分发器建立关联。”

MaxConcurrentCalls 消息并发处理的最大值(限制所有服务实例并发调用总数量),默认值:64

MaxConcurrentInstances 同一时刻服务上下文实例的最大数量(限制服务并发实例数量), 默认值:2147483647

MaxConcurrentSessions 同一时刻可以接受的最大会话数量(限制并发会话数量),默认值:10

2、web.config优化网站性能设置

3、使用sgen提高序列化的性能

在VS的post-build event中添加命令:sgen /a:”$(TargetPath)” /fore

4、读取内嵌资源文件

例如:有一个xml文件,设置为内嵌资源文件(Build Action: Embedded Resource),现在要用程序读取出来

protected void Page_Load(object sender, EventArgs e)

{

Response.Clear();

Response.ContentType = "text/xml";

Assembly assembly = new Source().GetType().Assembly;

using (Stream stream = assembly.GetManifestResourceStream("缺省的命名空间.groups.xml"))

{

using (StreamReader reader = new StreamReader(stream))

{

Response.Write(reader.ReadToEnd());

}

}

}

注意GetManifestResourceStream的参数格式为:<缺省的命名空间.><扩展命命名空间.><文件名>

其中<扩展命命名空间>,比如是文件所在的目录,如:缺省的命名空间.images.logo.jpg

另外,在ASP.NET 2.0中可以直接读取资源文件,并可享受内置的缓存功能

5、用PowerShell查看WMI信息

#安装WMI Administrative Tools

#PowerShell –> Get-WinObject –> class: WMI Tools中列出的Win32_SystemUsers

6、Lambda表达式的声明式(declarative)特性,函数式编程

static List<int> GetSquaresOfPositiveByLambda(List<string> strList)

{

return strList

.Select(s => Int32.Parse(s)) //转成整数

.Where(i => i % 2 == 0) //找出所有大于零的数

.Select(i => i * i) //算出每个数的平方

.OrderBy(i => i) //按照元素自身排序

.ToList(); //构造一个List

}

static Dictionary<char, List<string>> GetIndexByDelegate(IEnumerable<string> keywords)

{

return keywords

.GroupBy(k => k[0]) //按照首字母分组

.ToDictionary( //构造字典

g => g.Key, //以每组的Key作为键

g => g.OrderBy(k => k).ToList()); //对每组排序并生成列表

}

7、XDocument结合Lambda创建列表结点,以及XML声明。并且,让扩展ToString输出XML声明。

string[] strs = new string[] { "a", "b","c" };

XDocument doc = new XDocument(

new XDeclaration("1.0", "utf-8", null),

new XElement("Body",

new XElement("TimeStamp", DateTime.Now.ToString("yyyyMMddHHmmssfff")),

new XElement("CouponIds",

strs.Select<string, XElement>(s => new XElement("CouponId", s)).ToArray())

)

);

此方法输出了如下xml;

<?xml version="1.0" encoding="utf-8"?>

<Body>

<TimeStamp>20090813130648472</TimeStamp>

<CouponIds>

<CouponId>a</CouponId>

<CouponId>b</CouponId>

<CouponId>c</CouponId>

</CouponIds>

</Body>

#扩展方法,能输出XML声明为utf-8而不是utf-16的字符串,当然如果是保存在文件中的,可以直接用Save方法就行,XML声明可以原样保存

public static string ToXmlString(this XDocument doc)

{

return ToXmlString(doc, null);

}

public static string ToXmlString(this XDocument doc, XmlWriterSettings settings)

{

string xml = string.Empty;

using (MemoryStream stream = new MemoryStream())

{

using (XmlWriter xw = XmlWriter.Create(stream, settings))

{

doc.Save(xw);

}

xml = Encoding.UTF8.GetString(stream.ToArray());

}

return xml;

}

8、string、MemoryStream、byte[]的相互转换

#.字符串转比特数组

(1)byte[] bt=System.Text.Encoding.Default.GetBytes("字符串");

(2)byte[] bt=Convert.FromBase64String("字符串");

#.字符串转流

(1)MemoryStream ms=new MemoryStream(System.Text.Encoding.Default.GetBytes("字符串"));

(2)MemoryStream ms=new MemoryStream(Convert.FromBase64String("字符串"));

#.流转比特数组

(1)byte[] bt=ms.ToArray();

(2)MemoryStream ms=new MemoryStream();ms.Write(bt,0,ms.Length);

#.流转字符串

(1)string str=Convert.ToBase64String(ms.ToArray());

(2)string str=System.Text.Encoding.Default.GetString(ms.ToArray());

#.比特数组转字符串

(1)string str=System.Text.Encoding.Default.GetString(bt);

(2)string str=Convert.ToBase64String(bt);

#.比特数组转流

(1)MemoryStream ms=new MemoryStream(bt);

(2)MemoryStream ms=new MemoryStream();ms.Read(bt,0,bt.Lenght);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐