C#字符串处理机制——作业
来源:互联网 发布:java企业级开发面试题 编辑:程序博客网 时间:2024/05/01 21:44
题目名称
C#字符串处理机制
题目关键字
C#字符串处理
题目录入时间
2013-3-12 12:25:28
题目内容
选做题:C#中的字符串处理
要求
1、本题为选做题目;
2、了解、熟悉C#中的字符串的各种特殊处理;
3、了解、熟悉C#中的字符串底层实现,以及扩展应用。
内容
1、查阅资料,了解C#中的字符串在内存中的驻留机制;
2、查阅资料,了解C#中对于字符串以下几个声明:
· string myString;
· string myString = String.Empty;
· string myString = "";
以上的声明和后续字符串的使用,究竟有什么不同?
3、据说判断一个字符串的内容是否为空,采用if(0 == myString.Length)的速度是最快的(比if("" == myString) 要快),查阅相关资料,设计一下对应的对比实验。
4、可结合防伪码实验,对比一下,是否运行多次程序后,字符串生成速度会有提高?可设计对应的对比实验。
5、阅读此文章:C#基础知识梳理系列七:字符串,http://www.cnblogs.com/solan/archive/2012/08/03/CSharp07.html
提交内容
1、本题选做
2、把以上三个问题的网上资料整理后,给出链接,并把心得体会一起写在一份word文件中。
3、把对应的对比实验,压缩打包,全部源代码放到rar文件中。
问题链接:
问题1:C#的字符串内存驻留机制——http://kb.cnblogs.com/page/102225/
问题2:””和string.Empty的不同——
http://www.cnblogs.com/wangshuai901/archive/2012/05/06/2485657.html
问题3:if (0 == myString.Length)比if ("" == myString)快——http://blog.knowsky.com/157065.htm
心得体会:
关于C#中字符串的内存分配与驻留池的总结如以下几点:
http://kb.cnblogs.com/page/102225/
1、
String s1 = "Hello";
String s2 = "Hello";
//s2和s1的实际值都是Hello
bool same = (object) s1 == (object) s2;
//这里比较s1、s2是否引用了同一个对象实例
//所以不能写作bool same = s1 == s2;
//因为String类重载了==操作符来比较String对象包含的实际值
2、
使用字面量声明的字符串会进入驻留池,而其他方式声明的字符串并不会进入,也就不会自动享受到CLR防止字符串冗余的机制的好处了。
但是由于s2不是通过字面量声明的,CLR在为sb.ToString()方法的返回值分配内存时,并不会到驻留池中去检查是否有值为Hello的字符串已经存在了,所以自然不会让s2指向驻留池内的对象。
3、
为了让编程者能够强制CLR检查驻留池,以避免冗余的字符串副本,String类的设计者提供了一个名为Intern的类方法。
string s2 = String.Intern(sb.ToString());
4、
使用Intern方法的好处在于,如果Intern方法在驻留池中找到了相同值的字符串,此时虽然在内存中存在两份该字符串的副本(一份是参数,一份是驻留池中的),但是随着时间的流逝,参数所引用的那个副本会被垃圾回收掉,这样对于该字符串内存中就不存在冗余了。
不过同样值得注意的是,使用Intern方法让一个字符串存活于驻留池中也有一个副作用:即使已经不存在任何其它引用指向驻留池中的字符串了,这个字符串仍然不一定会被垃圾回收掉。也就是说即使驻留池中的字符串已经没有用处了,它可能也要等到CLR终结时才被销毁。当您使用Intern方法的时候,也应该考虑到这个特殊的行为。
问题3的对比实验:
使用以下方法可以准确的记录代码运行的耗时。
System.Diagnostics.Stopwatch stopwatch = new Stopwatch();
stopwatch.Start(); // 开始监视代码运行时间
// you code ....
stopwatch.Stop(); // 停止监视
TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间
double hours = timespan.TotalHours; // 总小时
double minutes = timespan.TotalMinutes; // 总分钟
double seconds = timespan.TotalSeconds; // 总秒数
double milliseconds = timespan.TotalMilliseconds; // 总毫秒数
问题4:
- C#字符串处理机制——作业
- C#字符串处理机制
- C#笔记5——C#常见字符串处理方法
- 黑马程序员——C#程序的异常处理机制
- C#事件处理机制
- C#异常处理机制
- C#消息处理机制
- C#消息处理机制
- c# 消息处理机制
- C# 消息处理机制
- c#异常处理机制
- C# 异常处理机制
- C#异常处理机制
- c# 异常处理机制
- c# 事件处理机制
- C# 实例练习——字符串处理(第一天)
- C# 实例练习——字符串处理(第三天)
- C#中的字符串处理
- man 命令的输出转换为.txt 或 .pdf
- 同步方法和异步方法的区别
- JAVA--基础加强_类加载器
- 计算机系统结构习题集1
- 字符串的全排列和组合递归非递归--排列组合扩展问题
- C#字符串处理机制——作业
- 敏捷开发团队考核分享
- CppUnit快速入门
- 理工科专业混得不如其他人的四大原因
- HttpComponents入门解析
- C#中string.empty “” 以及 null
- sigemptyset、sigaddset、sigprocmask的用法
- C#中字符串的内存分配与驻留池
- C#基础知识梳理系列七:字符串