zoukankan      html  css  js  c++  java
  • .NET面试基础知识之String(一)

    String

    String 是不可变的(immutable), 一旦建立,不能改变。

    字符串池

    CLR初始化时会创建一个内部的HASH TABLE,key是字符串,value是对托管堆上的字符串对象的引用。但是当显式的New一个字符串对象时,字符串池不起作用。

    System.Runtime.CompilerServices.CompilationRelaxationAttribute特性来开关字符串池

    ComplitationRelaxations.NoStringInterning

    SecureString

    命名空间System.Security

    SecureString的由来

    SecureString是用来保存机密的字符串。传统字符串以明码的形式分配在内存上,一个简单的内存读写工具就可以轻易捕获这些字符串。 对这些字符串加密时他们已经在内存很久了,解决这个问题的方法为在字符串的获得过程中直接进行加密。即SecureString.

    SecureString的分配不同于传统字符串,它被分配在非托管内存上,一开始就以加密的形式存在。对它的所有操作都是逐字符进行的。在这些操作时,字符会被解密,然后再操作,最后加密。有一小段时间,字符是以明码的形式存在的。

    SecureString实现了Dispose/Finalize模式。释放石对象内存全部置0

    代码示例

    using(SecureString ss=new SecureString())

    {

      ss.AppendChar('a');

      ss.AppendChar('b');

      ss.AppendChar('c');

      ss.InsertAt(1,'c');

      PrintSecureString(ss);

    }

    private unsafe static void PrintSecureString(SecureString str)

    {

      char* buffer=null;

      try

      {

        buffer=(char*)Marshal.SecureStringToBSTR(str);

        for(int i=0;*(buffer+i)!='';i++)

          Console.Write(*(buffer+i));

        Console.Write(" ");

      }

      finally

      {

        if(buffer!=null)

          Marshal.ZeroFreeBSTR((System.IntPtr)buffer);

      }

    }

  • 相关阅读:
    字符串与模式匹配算法(一):BF算法
    Spring MVC:HandlerMapping
    Spring MVC:DispatchServlet类
    Spring:面向切面编程的AOP
    Java:检查异常与未检查异常
    AOP源码解析:AspectJExpressionPointcutAdvisor类
    Vue+Webpack打包之后超过url-loader大小限制的图片在css的background-image中使用路径问题
    less
    ES6模块的import和export用法总结
    bootstrap4网格
  • 原文地址:https://www.cnblogs.com/sift/p/3594900.html
Copyright © 2011-2022 走看看