没有合适的资源?快使用搜索试试~ 我知道了~
本文实例讲述了C#警惕匿名方法造成的变量共享。分享给大家供大家参考,具体如下: 匿名方法 匿名方法是.NET 2.0中引入的高级特性,“匿名”二字说明它可以把实现内联地写在一个方法中,从而形成一个委托对象,而不用有明确地方法名,例如: static void Test() { Action<string> action = delegate(string value) { Console.WriteLine(value); }; action(Hello World); } 但是匿名方法的关键并不仅于“匿名”二字。其最强大的特性就在于匿名方法形成了一个闭包,它可
资源推荐
资源详情
资源评论
C#警惕匿名方法造成的变量共享实例分析警惕匿名方法造成的变量共享实例分析
本文实例讲述了C#警惕匿名方法造成的变量共享。分享给大家供大家参考,具体如下:
匿名方法匿名方法
匿名方法是.NET 2.0中引入的高级特性,“匿名”二字说明它可以把实现内联地写在一个方法中,从而形成一个委托对象,而不
用有明确地方法名,例如:
static void Test()
{
Action<string> action = delegate(string value)
{
Console.WriteLine(value);
};
action("Hello World");
}
但是匿名方法的关键并不仅于“匿名”二字。其最强大的特性就在于匿名方法形成了一个闭包,它可以作为参数传递到另一个方
法中去,但同时也能访问方法的局部变量和当前类中的其它成员。例如:
class TestClass
{
private void Print(string message)
{
Console.WriteLine(message);
}
public void Test()
{
string[] messages = new string[] { "Hello", "World" };
int index = 0;
Action<string> action = (m) =>
{
this.Print((index++) + ". " + m);
};
Array.ForEach(messages, action);
Console.WriteLine("index = " + index);
}
}
如上所示,在TestClass的Test方法中,action委托调用了同在TestClass类中的私有方法Print,并对Test方法中的局部变量
index进行了读写。在加上C# 3.0中Lambda表达式的新特性,匿名方法的使用得到了极大的推广。不过,如果使用不当,匿名
方法也容易造成难以发现的问题。
问题案例问题案例
某位兄弟最近在一个简单的数据导入程序,主要工作是从文本文件中读取数据,进行分析和重组,然后写入数据库。其逻辑大
致如下:
static void Process()
{
List<Item> batchItems = new List<Item>();
foreach (var item in ...)
{
batchItems.Add(item);
if (batchItems.Count > 1000)
{
DataContext db = new DataContext();
db.Items.InsertAllOnSubmit(batchItems);
db.SubmitChanges();
batchItems = new List<Item>();
}
}
}
每次从数据源中读取数据后,添加到batchItems列表中,当batchItems满1000条时便进行一次提交。这段代码功能运行正常,
可惜时间卡在了数据库提交上。数据的获取和处理很快,但是提交一次就要花较长时间。于是想想,数据提交和数据处理不会
有资源上的冲突,那么就把数据提交放在另外一个线程上进行处理吧!于是,使用ThreadPool来改写代码:
static void Process()
{
List<Item> batchItems = new List<Item>();
foreach (var item in ...)
资源评论
weixin_38608055
- 粉丝: 7
- 资源: 966
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功