题目名称
|
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#...
本文将探讨一种更简洁的方法——使用Hangfire库,在.NET和.NET Core应用中轻松实现后台作业处理。 Hangfire是一个开源的.NET库,它提供了一种优雅的方式来在无状态的Web应用中调度和执行后台任务,而无需依赖...
- **方法重载**:`Func1`方法有两组不同的参数列表,分别处理字符串和整数。这展示了方法重载的用法。 ### 代码片段7 #### 代码概览 ```csharp class Program { static void Main(string[] args) { string b; ...
2. 数据库连接:学习如何创建和管理数据库连接字符串,建立C#应用程序与SQL Server之间的连接。 3. SQL查询:掌握基本的SQL语言,如SELECT、INSERT、UPDATE和DELETE语句,用于查询和操作数据。 4. 参数化查询:...
接收到JSON数据后,C#的System.Json或Newtonsoft.Json库可以用来解析JSON字符串为对象。解析后的数据可以映射到对应的数据库模型,然后使用ADO.NET、Entity Framework等ORM工具将数据插入到数据库中。确保在插入前对...
1. **基础语法**:理解并运用C#的基本语法,包括声明变量、赋值、运算符的使用,以及掌握基本的数据类型,如整型(int)、浮点型(float/double)、字符串(string)等。 2. **控制流**:学习如何使用if条件语句、...
这需要理解字符串解析、浮点数运算以及条件判断等概念。 4. **异常处理**:计算器需要处理无效输入,比如连续输入两个运算符或者除以零等错误情况,这时会用到异常处理机制来捕获并处理这些异常。 5. **数据存储**...
最后,将应用部署到服务器,可能涉及到IIS配置、数据库连接字符串的调整等。 总的来说,这个毕业设计项目涵盖了ASP.NET开发的多个方面,包括但不限于Web应用程序设计、数据库管理、安全性实践以及用户体验优化。...
关键字查询通常涉及到字符串匹配和排序算法,如二分查找或哈希索引,以提高查询效率。 文件的读写操作是此项目的一大亮点。通讯录信息通常需要持久化存储,C#提供了丰富的文件I/O类,如FileStream、StreamReader和...
例如,我们需要实现一个函数来解析用户的输入字符串,然后按照数学规则执行计算。 4. **错误处理**:计算器还需要处理可能出现的错误,比如除以零、非法输入等。这需要在程序中加入异常处理机制,如C#的`try-catch`...
正则表达式是一种用于匹配字符串中字符组合的强大工具。它可以用来搜索、替换或提取文本中的模式。 **10. 内存操作** - **malloc()**:动态分配内存。 - **free()**:释放由`malloc()`分配的内存。 - **calloc()**...