当前位置: 首页 > news >正文

武汉网站建设whjzyh/如何进行app推广

武汉网站建设whjzyh,如何进行app推广,301网站跳转设置,学编程的好处不可变对象 不可变(immutable): 即对象一旦被创建初始化后,内存中该类型的值永远不会改变,之后的每次改变都会产生一个新对象。 作为不可变类型,最主要的特性表现是:一旦创建,只要修改,就会在托…

不可变对象
不可变(immutable): 即对象一旦被创建初始化后,内存中该类型的值永远不会改变,之后的每次改变都会产生一个新对象。
作为不可变类型,最主要的特性表现是:一旦创建,只要修改,就会在托管堆上创建一个新的对象实例,而且和上一个对象实例是相邻的,在托管堆上分配到一块连续的内存空间。
例1:
string str=“zhjajihfgm”;
str.Substring(0, 6)
c#中的string是不可变的,Substring(0, 6)返回的是一个新字符串值,而原字符串在共享域中是不变的。另外一个StringBuilder是可变的,这也是推荐使用StringBuilder的原因。
例2:
class Contact
{
public string Name { get; set; }
public string Address { get; set; }
public Contact(string contactName, string contactAddress)
{
Name = contactName;
Address = contactAddress;
}
}
var mutable = new Contact(“二毛”, “清华”);
mutable.Name = “大毛”;
mutable.Address = “北大”;
我们实例化Contact赋值给mutable,随后我们可以修改Contact对象内部字段值,它已经不是初始后的值,可称为可变(mutable)对象。
可变对象在多线程并发中共享,是存在一些问题的。多线程下A线程赋值到 Name = “大毛” 这一步,其他的线程有可能读取到的数据就是:
mutable.Name == “大毛”;
mutable.Address == “清华”;
很明显这样数据完整性就不能保障,也有称数据撕裂。我们把可变对象更改为不可变对象如下:
public class Contact2
{
public string Name { get; private set; }
public string Address { get; private set; }
private Contact2(string contactName, string contactAddress)
{
Name = contactName;
Address = contactAddress;
}
public static Contact2 CreateContact(string name, string address)
{
return new Contact2(name, address);
}
}
使用时只能通过Contact2的构造函数来初始化Name和Address字段。Contact2此时即为不可变对象,因为对象本身是个不可变整体。通过使用不可变对象可以不用担心数据完整性,也能保证数据安全性,不会被其他线程修改。

不可变对象如下:
string
ImmutableStack
ImmutableQueue
ImmutableList
ImmutableHashSet
ImmutableSortedSet
ImmutableDictionary
ImmutableSortedDictionary
使用如下,
ImmutableStack a1 = ImmutableStack.Empty;
ImmutableStack a2 = a1.Push(10);
ImmutableStack a3 = a2.Push(20);
ImmutableStack a4 = a3.Push(30);
ImmutableStack iv3 = a4.Pop();
使用Net不可变列表集合有一点要注意的是,当我们Push值时要重新赋值给原变量才正确,因为push后会生成一个新对象,原a1只是旧值:
ImmutableStack a1 = ImmutableStack.Empty;
a1.Push(10); //不正确,a1仍是空值值,push会生成新的栈。
a1 = a1.Push(10); //需要将新栈重新赋值给a1
不可变对象优点
集合共享安全,从不被改变
访问集合时,不需要锁集合(线程安全)
修改集合不担心旧集合被改变
保证数据完整性,安全性
不可变对象缺点
当每次对象/集合操作都会返回新值。而旧值会保留一段时间,会使内存有极大开销,还会给GC造成回收负担,性能也比可变集合差(大约相差近40倍)。
跟string和StringBuild一样,Net提供的不可变集合也增加了批量操作的API,用来避免大量创建对象:
ImmutableList immutable = ImmutableList.Empty;
//转换成可批量操作的集合
var immutable2 = immutable.ToBuilder();
immutable2.Add(“xx”);
immutable2.Add(“xxx”);
//还原成不可变集合
immutable = immutable2.ToImmutable();

这里主要讲的是不可变集合主要应用场景例如,类似迅雷的下载任务、撤销操作用来记录操作的集合等。这类场景通常不会对其中某一个元素内容进行编辑而且操作元素的频率并不频繁,同时还满足多线程安全避免加锁操作影响程序性能。

http://www.jmfq.cn/news/5300893.html

相关文章:

  • wordpress add_action 是什么意思/广告优化师前景怎样
  • wordpress个人中心没有反应/广东网站优化公司
  • 福清建设银行网站/站长工具是干嘛的
  • 景德镇网站建设公司/重庆网页搜索排名提升
  • 免费微网站建站系统源码/seo优化排名易下拉用法
  • dede网站栏目管理空白/网站平台怎么推广
  • 申报网站建设理由 模板/搜索引擎优化答案
  • 云南网站建设公司排名/千锋教育课程
  • 河南省监理建设协会网站/黄页大全
  • 比较好的国外网站建设公司/免费的网络营销方式
  • 水贝做网站公司/旺道seo优化
  • 广州化妆品网站制作/seo推广优化平台
  • 南京网站建设招聘/产品网络推广方式
  • 易语言对做网站有什么帮助/太仓seo网站优化软件
  • 网站建设方面的书/品牌推广营销
  • 武汉网站建设哪家最好?/最近新闻
  • 做视频网站弹窗/宁波网站推广运营公司
  • 如何使用模板网站建设网页/中国站长站官网
  • 上海展台搭建商/怎么样做免费的百度seo
  • 专业的门户网站建设方案/网络营销公司招聘
  • 网站备案证书下载不了/青岛优化网站关键词
  • 有用element做网站的/济南优化网站关键词
  • 网站后台管理系统摘要怎么写/信息流广告优化
  • 注册网站的步骤/怎样自己开发一款软件
  • 湖北微网站建设报价/百度网站快速排名公司
  • 抖音代运营合同范标准版/南昌百度seo
  • uc网站怎么做/seo的形式有哪些
  • wordpress教程登陆/window优化大师官网
  • b2b网站推广技巧/企业seo推广外包
  • 网站建设免费空间哪里有/媒体公关是做什么的