2013.9.12(미국 기준)Immutable Collection RC 버전이 나왔다. 입수는 NuGet으로 할 수 있다. 아직 정식 버전이 나오지 않아서 닷넷 프레임워크에는 들어가 있지 않지만 아마 다음 버전에서 들어가지 않을까 생각한다(VS 2014 정도)

http://blogs.msdn.com/b/dotnet/archive/2013/09/12/immutable-collections-are-now-rc.aspx

 

 

Immutable Collection는 말 그래도 변하지 않는 컬렉션이라고 생각하면 된다. 컬렉션을 처음 생성할 때 데이터를 입력하면 이후에 해당 데이터를 변경할 수 없다.

생성 후 데이터가 바뀌지 않으므로 의도하지 않은 데이터 변경을 막을 수 있고, 멀티스레드에 안전하며, 성능이 기존 컬렉션 보다 더 좋다.

올해 1월에 나온 관련 글을 보면 아래와 같은 성능 차이가 있다고 합니다.

http://www.infoq.com/resource/news/2013/01/Immutable-BCL/ja/resources/chart.png 

http://www.infoq.com/jp/news/2013/01/Immutable-BCL

 

기존 데이터를 꼭 바꾸고 싶다면 메모리 해제를 한 후 다시 생성하는 수 밖에 없다.

 

예제 코드

static void Test1()

{

var lst = new List<KeyValuePair<string, string>>();


lst.Add(new KeyValuePair<string, string>("key1", "data1"));


lst.Add(new KeyValuePair<string, string>("key2", "data2"));


lst.Add(new KeyValuePair<string, string>("key3", "data3"));


lst.Add(new KeyValuePair<string, string>("key4", "data4"));


lst.Add(new KeyValuePair<string, string>("key5", "data5"));



var im = System.Collections.Immutable.ImmutableDictionary.CreateRange<string, string>(lst);

im.Add("key6", "data6");

Console.WriteLine("요소 수:" + im.Count.ToString());


foreach (var data in im)

{

Console.WriteLine(string.Format("Key:{0}, Value:{1}", data.Key, data.Value));

}



lst.RemoveAt(0);

im = null;

im = System.Collections.Immutable.ImmutableDictionary.CreateRange<string, string>(lst);

Console.WriteLine("요소 수:" + im.Count.ToString());


foreach (var data in im)

{

Console.WriteLine(string.Format("Key:{0}, Value:{1}", data.Key, data.Value));

}

}


결과

 

 

 

Immutable Collection류가 Scala는 이미 있다고 한다.

 

저작자 표시
신고
by 흥배 2013.11.14 08:00
| 1 |