`
Kingson_Wu
  • 浏览: 123656 次
文章分类
社区版块
存档分类
最新评论

C#字符串处理机制——作业

 
阅读更多


题目名称

C#字符串处理机制

题目关键字

C#字符串处理

题目录入时间

2013-3-1212:25:28

题目内容

选做题:C#中的字符串处理

要求

1、本题为选做题目;

2、了解、熟悉C#中的字符串的各种特殊处理;

3、了解、熟悉C#中的字符串底层实现,以及扩展应用。

内容

1、查阅资料,了解C#中的字符串在内存中的驻留机制;

2、查阅资料,了解C#中对于字符串以下几个声明:

·stringmyString;

·stringmyString=String.Empty;

·stringmyString="";

以上的声明和后续字符串的使用,究竟有什么不同?

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、

Strings1="Hello";

Strings2="Hello";

//s2和s1的实际值都是Hello

boolsame=(object)s1==(object)s2;

//这里比较s1、s2是否引用了同一个对象实例

//所以不能写作boolsame=s1==s2;

//因为String类重载了==操作符来比较String对象包含的实际值

2、

使用字面量声明的字符串会进入驻留池,而其他方式声明的字符串并不会进入,也就不会自动享受到CLR防止字符串冗余的机制的好处了。

但是由于s2不是通过字面量声明的,CLR在为sb.ToString()方法的返回值分配内存时,并不会到驻留池中去检查是否有值为Hello的字符串已经存在了,所以自然不会让s2指向驻留池内的对象。

3、

为了让编程者能够强制CLR检查驻留池,以避免冗余的字符串副本,String类的设计者提供了一个名为Intern的类方法。

strings2=String.Intern(sb.ToString());

4、

使用Intern方法的好处在于,如果Intern方法在驻留池中找到了相同值的字符串,此时虽然在内存中存在两份该字符串的副本(一份是参数,一份是驻留池中的),但是随着时间的流逝,参数所引用的那个副本会被垃圾回收掉,这样对于该字符串内存中就不存在冗余了。

不过同样值得注意的是,使用Intern方法让一个字符串存活于驻留池中也有一个副作用:即使已经不存在任何其它引用指向驻留池中的字符串了,这个字符串仍然不一定会被垃圾回收掉。也就是说即使驻留池中的字符串已经没有用处了,它可能也要等到CLR终结时才被销毁。当您使用Intern方法的时候,也应该考虑到这个特殊的行为。

问题3的对比实验:

使用以下方法可以准确的记录代码运行的耗时。

System.Diagnostics.Stopwatchstopwatch=newStopwatch();

stopwatch.Start();//开始监视代码运行时间

//youcode....

stopwatch.Stop();//停止监视

TimeSpantimespan=stopwatch.Elapsed;//获取当前实例测量得出的总时间

doublehours=timespan.TotalHours;//总小时

doubleminutes=timespan.TotalMinutes;//总分钟

doubleseconds=timespan.TotalSeconds;//总秒数

doublemilliseconds=timespan.TotalMilliseconds;//总毫秒数

问题4

分享到:
评论

相关推荐

    c#记事本绝对好用乐言版

    同时,C#的字符串处理能力和正则表达式库让文本操作变得更为便捷。此外,事件驱动编程模型使得程序能响应用户的交互行为,例如点击按钮、选择菜单项等,从而触发相应的功能执行。 对于计算机专业的学生而言,C#...

    在.NET和.NETCore应用程序中执行后台作业处理的简单方法。无需Windows服务或单独的进程_C#_HTML_下.zip

    本文将探讨一种更简洁的方法——使用Hangfire库,在.NET和.NET Core应用中轻松实现后台作业处理。 Hangfire是一个开源的.NET库,它提供了一种优雅的方式来在无状态的Web应用中调度和执行后台任务,而无需依赖...

    C#经典面向对象测试题

    - **方法重载**:`Func1`方法有两组不同的参数列表,分别处理字符串和整数。这展示了方法重载的用法。 ### 代码片段7 #### 代码概览 ```csharp class Program { static void Main(string[] args) { string b; ...

    Accp5.0 c#

    2. 数据库连接:学习如何创建和管理数据库连接字符串,建立C#应用程序与SQL Server之间的连接。 3. SQL查询:掌握基本的SQL语言,如SELECT、INSERT、UPDATE和DELETE语句,用于查询和操作数据。 4. 参数化查询:...

    windows服务----基于RabbitMQ

    接收到JSON数据后,C#的System.Json或Newtonsoft.Json库可以用来解析JSON字符串为对象。解析后的数据可以映射到对应的数据库模型,然后使用ADO.NET、Entity Framework等ORM工具将数据插入到数据库中。确保在插入前对...

    作业23:作业23

    1. **基础语法**:理解并运用C#的基本语法,包括声明变量、赋值、运算符的使用,以及掌握基本的数据类型,如整型(int)、浮点型(float/double)、字符串(string)等。 2. **控制流**:学习如何使用if条件语句、...

    简单的计算器制作

    这需要理解字符串解析、浮点数运算以及条件判断等概念。 4. **异常处理**:计算器需要处理无效输入,比如连续输入两个运算符或者除以零等错误情况,这时会用到异常处理机制来捕获并处理这些异常。 5. **数据存储**...

    ASP.NET毕业设计——ASP.NET《数据库原理及应用技术》课程指导平台的开发(源代码+论文).zip

    最后,将应用部署到服务器,可能涉及到IIS配置、数据库连接字符串的调整等。 总的来说,这个毕业设计项目涵盖了ASP.NET开发的多个方面,包括但不限于Web应用程序设计、数据库管理、安全性实践以及用户体验优化。...

    通讯录加密版.zip

    关键字查询通常涉及到字符串匹配和排序算法,如二分查找或哈希索引,以提高查询效率。 文件的读写操作是此项目的一大亮点。通讯录信息通常需要持久化存储,C#提供了丰富的文件I/O类,如FileStream、StreamReader和...

    计算器的代码编写

    例如,我们需要实现一个函数来解析用户的输入字符串,然后按照数学规则执行计算。 4. **错误处理**:计算器还需要处理可能出现的错误,比如除以零、非法输入等。这需要在程序中加入异常处理机制,如C#的`try-catch`...

    觅职渣记-互联网技术类笔试面试总结

    正则表达式是一种用于匹配字符串中字符组合的强大工具。它可以用来搜索、替换或提取文本中的模式。 **10. 内存操作** - **malloc()**:动态分配内存。 - **free()**:释放由`malloc()`分配的内存。 - **calloc()**...

Global site tag (gtag.js) - Google Analytics