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


    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);

  • 相关阅读:
    WINREG.H 编译出错
    WINREG.H 编译出错
    JS创建对象的几种方式
    清除radio单选框外边距
    Dragging MovieClips
    Cannot Say No
    分层提高软件系统的可测试性
    如何从技术上掌控项目?
    领导我只需要你告诉我你要做什么,怎么做让我来好吗?
    如何依据框架进行任务分解
  • 原文地址:https://www.cnblogs.com/chenjunbiao/p/1760310.html
Copyright © 2020-2023  润新知