C# 가비지 컬렉터

 

JAVA 프로그램이나 C#의 가장 큰 장점은 가비지 컬렉터 인듯 하다.

나는 C, C++ 프로그램을 해본적이 없어서 메모리에 대한 지식이 부족하지만

C#을 개발하면서 메모리에 대한 걱정은 하지 않고 마음 편히 개발 하였던거 같다.

   

가비지 컬렉터가 무엇일까?

- 가비지 컬렉터는 프로그램과 어떠한 연결 고리를 가지고 있지 않은 쓸모 없는 객체를 찾아서 메모리를 해제하는 것으로 간단히 정의 할 수 있다. 즉 쓸모 없는 메모리는 회수 하겠다 라는 것이다.

   

가비지 컬렉터는 언제 실행 될까?

가비지 컬렉터가 실행 되는 조건은 정해진 힙 메모리가 다 찻을때 실행 된다.

   

가비지 컬렉터가 정리되는 순서

- 객체의 수명에 따라 컬렉터를 실행 한다. 0세대 실행 후 메모리가 남아 있으면 다음 세대로 진행 하지 않는다. 오래된 객체의 경우 컬렉터에서 살아남을 확률이 높다. 다음과 같은 세대로 나눌 수 있다.

  • 0 세대 : 컬렉션 대상 표시가 된 적이 없는 새로 할당된 객체를 식별
  • 1세대 : 가비지 컬렉션 검색에서 살아 남은 객체를 식별(대상에 포함되지만 힙 메모리에 공간이 남아서 수거 되지 않은 객체)
  • 2세대 : 두 번 이상의 가비지 컬력션에서 살아 남는 객체.

강제로 가비지 컬렉터를 회수 하는 방법

- GC.Collect() 함수를 사용

세대별로 조사하고 싶을때는 GC.Collect(0), GC.Collect(1), GC.Collect(2) 이렇게 인자를 넣어서 사용

   

강제로 가비지 컬렉터를 하면 좋지 않을까?

- 가비지 컬렉터는 언제 실행 될지 모른다. 그래서 사용자가 강제로 실행하면 좋지 않을까? 물론 상황에 따라 좋을 수도 있다. 하지만 객체 회수시 호출할때마다 살아 남은 0세대 객체들은 1세대로 , 1세대 객체는 2세대로 바뀌게 되므로 자주 가비지 컬렉터가 호출 될경우 2세대의 객체가 넘쳐나 수거해 가는데 오랜 시간이 걸린다.

'SW Engineering > Programming' 카테고리의 다른 글

  (0) 2015.07.22
ASP.NET에서 MySQL 연결  (0) 2015.07.16

C# 윈도우즈 계정 및 컴퓨터 이름 불러오기

 

C#에서 윈도우즈 계정과 컴퓨터 이름을 불러올때 사용. 

   

[윈도우즈 계정]

 textBox1.Text = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

   

계정에서 도메인 명을 뺀 이름만 추출하고 싶을 때.

 textBox1.Text = (System.Security.Principal.WindowsIdentity.GetCurrent().Name).Split('\\')[1];

   

[컴퓨터 이름]
 textBox2.Text =   SystemInformation.ComputerName; 

   

'SW Engineering > Programming' 카테고리의 다른 글

C# 가비지 컬렉터  (0) 2015.07.22
ASP.NET에서 MySQL 연결  (0) 2015.07.16

ASP.NET에서 MySQL 연결

 

  • Version : ASP.NET (VS 2013)

 

ASP.NET에서 MySQL 연결 방법에 대해서 알아본다.

 

MySQL에 연결하기 위해서 NuGet 패키지에서 MySQL DLL 을 추가한다. VS 2013 툴 목록에서 [프로젝트] – [NuGet 패키지 관리]를 클릭한다.

 

 

NuGet 패키지 관리 창이 나타나면 mysql dll을 검색하여 설치한다.

 

 

MySQL DLL을 설치하면 Web.config 파일에 자동으로 MySQL Data Provider이 생성된 것을 확인 할 수 있다.

 

 

MySQL에 연결하여 데이터 입력 하기.

public string insertuser(DateTime RegDate, Int32 Num, string Conn)

{

 

// For MYSQL Authentication

MySql.Data.MySqlClient.MySqlConnection mySqlConnection = new MySql.Data.MySqlClient.MySqlConnection();

mySqlConnection.ConnectionString = @"Data Source=iDataSource; Database=DB_Name; User ID=iUser; Password='iPass'";

MySql.Data.MySqlClient.MySqlCommand mySQLComand = mySqlConnection.CreateCommand();

mySqlConnection.Open();

mySQLComand.CommandText = "INSERT INTO tbl_a (RegDate, Num) VALUES (@RegDate, @Num)";

// Add Parameters to Command Parameters collection

 

mySQLComand.Parameters.Add("@RegDate", MySql.Data.MySqlClient.MySqlDbType.DateTime);

mySQLComand.Parameters.Add("@Num", MySql.Data.MySqlClient.MySqlDbType.Int16);

 

 

mySQLComand.Parameters["@RegDate"].Value = RegDate;

mySQLComand.Parameters["@Num"].Value = Num;

 

 

mySQLComand.ExecuteNonQuery();

return "done";

 

 

}

 

 

 

 

2015-04-29 / 강성욱 / http://sqlmvp.kr

 

 

ASP.NET, ASP.NET connect to MySQL, MySQL연결, DB연결, ASP to DB, IIS, MySQL, WebServer, 웹프로그래밍, ASP 프로그래밍

'SW Engineering > Programming' 카테고리의 다른 글

C# 가비지 컬렉터  (0) 2015.07.22
  (0) 2015.07.22

+ Recent posts