C# .net Framework下的 ImmutableList 不变对象集合类的使用方法

勇哥注:

不可变对象集合类由于其特性,天生就是线程安全的,多线程同时读写都没得问题。

它一共有下面这些:

  • ImmutableArray<T>

  • ImmutableStack<T>

  • ImmutableQueue<T>

  • ImmutableList<T>

  • ImmutableHashSet<T>

  • ImmutableSortedSet<T>

  • ImmutableDictionary<K, V>

  • ImmutableSortedDictionary<K, V>

但是这种集合在频繁修改的时候开销就比较大。


下面勇哥写一个示例程序:

image.png

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

        ImmutableList<int> list1= ImmutableList.Create<int>();
     
        public Form1()
        {
            InitializeComponent();
           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            
            Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    Random ran = new Random();
                    var list2 = list1.ToBuilder();
                    list2.Add(ran.Next(0,1000));
                    list1 = list2.ToImmutable();
                   
                    Thread.Sleep(1300);
                    
                }
            });
          
            
        }

        private void button2_Click(object sender, EventArgs e)
        {
         
            Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    Random ran = new Random();
                    var list2 = list1.ToBuilder();
                    list2.Add(ran.Next(0,1000));
                    list1 = list2.ToImmutable();
                    Thread.Sleep(1800);

                }
            });

        }

        private void button3_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
            timer1.Start();


        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            var sb1 = new StringBuilder();
            for(int i=0;i<list1.Count;i++)
            {
                sb1.Append(list1[i] + ",");
            }
            RtbMsg.Text = sb1.ToString();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            list1=list1.RemoveAt(0);
        }
    }
}


另一有篇介绍不可变对象集合见下面文章:

http://www.skcircle.com/?id=1996


另外,此集合不是.net Framework自带的,你得去Nuget去下载,下载关键字如下:

image.png



--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864