'2019/05'에 해당되는 글 3건

Programming/.NET

문자열을 다루고자 할때 흔히 사용하느 타입이 string입니다.

string s = "hello world!";
Console.WriteLine(s);

string은 한번 문자열값을 할당한 뒤 변경이 없는 경우에는 쓸만하지만 문자열 추가와 같은 잦은 변경이 발생한다면 StringBuilder를 사용하는 편이 성능상 훨씬 이득입니다.

StringBuilder sb = new StringBuilder("hello world!");
 
sb.Append("abc");
sb.Append("def");
 
Console.Write(sb.ToString());

string은 값이 변경될때마다 변경이후의 크기만큼 메모리를 힙에 할당하고 문자열의 내용전체를 복사해 할당된 힙메모리에 저장한뒤 해당 힙의 주소를 string변수에 전달하는 과정을 반복해야 합니다.

 

하지만 StringBuilder는 미리 어느정도의 메모리를 할당하여 문자열값을 담아두고 값이 변경되면 할당된 메모리내에서 변경되는 값을 복사합니다. 만약 Append등의 메서도호출로 저장해야할 문자열값이 늘어나서 메모리가 더 필요해지만 그때 필요한 만큼의 메모리를 할당합니다. 이러한 차이로 인해 string의 값이 자주변경되는 환경에서는 성능이 느려질 수 밖에 없습니다.

 

따라서 문자열연결이나 변경작업이 자주 발생되는 경우에는 string보다는 StringBuilder사용을 권장합니다.

'Programming > .NET' 카테고리의 다른 글

정규식(Regular)  (0) 2019.06.20
힙과 스택  (0) 2019.06.11
[C#] StringBuilder  (0) 2019.05.28
[C#] Stopwatch  (0) 2019.05.09
가비지 수집기 : GC (Garbage Collector)  (0) 2019.04.30
[C#] null 조건  (0) 2019.04.16
0 0
Programming/Microsoft SQL Server

The filegroup '???" cannot be removed bacause it is not empty.

 

특정 파일 그룹에 인덱스를 생성한뒤 어떠한 이유에서 해당 인덱스를 삭제한 후 사용중이던 파일그룹더 같이 삭제하려고 하는 경우에 위와 같은 오류를 내면서 파일그룹이 삭제되지 않는 경우가 있습니다. 이런 경우 우선 해당 파일그룹을 사용중인 개체를 확인하도록 합니다.

Select t.name as table_name, i.name as index_name, ds.name as data_space_name, ds.type_desc, ps.name as partition_scheme_name
From sys.tables t join sys.indexes i
On t.object_id = i.object_id
join sys.data_spaces ds
On i.data_space_id = ds.data_space_id
Left Join sys.partition_schemes ps
On ps.data_space_id = ds.data_space_id;

테이블이 확인되면 해당 테이블에서 사용중인 인덱스와 같은 요소를 확인합니다. 인덱스를 삭제했다면 인덱스가 확인되지 않을 텐데 그렇다면 일단 임의의 인덱스를 생성합니다. 그리고 해당 인덱스의 속성을 확인해 Storage부분에서 Filegroup의 값을 확인합니다.

 

 

별도로 파일그룹을 지정하지 않았는데도 해당 인덱스가 삭제하려는 파일그룹에 소속된 상태라면 이걸 다른 파일그룹으로 변경합니다.

 

그리고 다시 파일그룹삭제를 시도하면 정상적으로 삭제됨을 확인할 수 있습니다.

'Programming > Microsoft SQL Server' 카테고리의 다른 글

파일그룹에 인덱스생성 후 삭제관련 문제  (0) 2019.05.17
인덱스(Index) - 1  (0) 2019.03.26
[SQL] 전체 텍스트 검색  (0) 2018.09.27
트랜잭션 (Transaction)  (0) 2018.09.12
분산 트랜잭션 설정  (0) 2018.07.11
[SQL] 기본언어확인및 변경  (0) 2018.01.30
0 0
Programming/.NET

System.Diagnostics.Stopwatch를 이용하면 시작과 끝사이의 시간차를 알 수 있습니다.

System.Diagnostics.Stopwatch w = new System.Diagnostics.Stopwatch();
w.Start();

int length = 5;
for (int i = 0; i < length; i++)
    Thread.Sleep(1000);

w.Stop();
Console.WriteLine(w.Elapsed.TotalSeconds + " 초 소요됨");

 

'Programming > .NET' 카테고리의 다른 글

힙과 스택  (0) 2019.06.11
[C#] StringBuilder  (0) 2019.05.28
[C#] Stopwatch  (0) 2019.05.09
가비지 수집기 : GC (Garbage Collector)  (0) 2019.04.30
[C#] null 조건  (0) 2019.04.16
[ASP.NET] 인증및 접근제어와 로그인  (0) 2019.04.11
0 0
1
블로그 이미지

클리엘