본문 바로가기

ClielLab On Post

VARCHAR(MAX)나 NVARCHAR(MAX)에 문자열 삽입시 잘림현상에 대해 VARCHAR(MAX)나 NVARCHAR(MAX)는 최대 넣을 수 있는 데이터양이 2GB에 달합니다. 그런데 실제 문자열을 담기를 시도해 보면 2GB에 훨씬 못미치는 VARCHAR(MAX) 8000자 NVARCHAR(MAX) 4000자 밖에 못들어 감을 확인할 수 있습니다. Declare @content VarChar(Max); Set @content = REPLICATE('A', 10000); Select LEN(@content); --결과 8000 이런 경우에는 넣으려는 문자열데이터를 VARCHAR(MAX)나 NVARCHAR(MAX)로 형변환해줘야 합니다. Declare @content VarChar(Max); Set @content = REPLICATE(CAST('A' AS VarChar(Max)).. 더보기
[C#] 로그 데이터 다루기 C#에서 로그데이터를 다루려면 EventLog 클래스를 사용합니다. EventLog el = new EventLog("System"); foreach (EventLogEntry ele in el.Entries) Response.Write(ele.Source + ":::" + ele.Message + " "); 위 예제는 System부분의 로그데이터를 읽어오도록 한 것이며 각 로그를 EventLogEntry개체를 통해 이벤트발생 주최와 로그내용을 확인하고 있습니다. 만약 Application이나 Security등 다른 범주의 로그를 확인하려면 EventLog객체 생성시 해당 값을 지정해 줄 수 있습니다. if (!EventLog.SourceExists("cliel application")) EventLog.. 더보기
정규식(Regular) 1. 일반적인 문자열에 대응 - "문자열" string s = @"abcdefghijklmn"; Regex regex = new Regex("cde"); //문자열중 cde를 찾음 MatchCollection mc = regex.Matches(s); foreach (Match m in mc) Console.WriteLine("{0}:{1}", m.Index, m.Value); 2. 알파벳 대소문자 문시 - RegexOptions.IgnoreCase string s = @"abCDEfghijklmn"; Regex regex = new Regex("cde", RegexOptions.IgnoreCase); 3. 한문자와 일치 - . string s = @"aaa aba abb bac def"; Regex re.. 더보기
힙과 스택 컴퓨터(Computer)가 프로그램(Program)을 실행하려면 우선 프로그램의 코드(Code)와 프로그램에서 사용하는 데이터를 메모리(Memory)에 적재해야 합니다. 그리고 메모리에 적재된 프로그램코드를 CPU가 하나씩 실행함으로서 결과적으로 컴퓨터가 프로그램을 동작시키는 것입니다. 이때 데이터를 저장하기 위한 메모리는 용도에 따라 힙과 스택으로 분류될 수 있습니다. 1. 스택(Stack) 프로그램이 실행되는것 자체를 하나의 프로세스(Process)라고 볼 수 있습니다. 그런데 프로세스가 시작되면 하나의 주 스레드(Thread)가 실행되며 실제 프로그램의 동작처리는 이 스레드가 담당하게 됩니다. 하나의 프로세스는 여러개의 스레드를 실행시킬 수 있고 이 스레드가 모두 실행이 종료되어야 비로소 프로세스도.. 더보기
[C#] StringBuilder 문자열을 다루고자 할때 흔히 사용하느 타입이 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변수에.. 더보기
파일그룹에 인덱스생성 후 삭제관련 문제 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.. 더보기
[C#] Stopwatch 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 + " 초 소요됨"); 더보기
가비지 수집기 : GC (Garbage Collector) GC는 힙에 할당된 객체의 소멸을 자동으로 처리하여 메모리를 관리합니다. 이때 객체가 할당된 힙메모리의 관리는 세대로 구분하여 처리하게 됩니다. 예를 들어 static void Main(string[] args) { MyClass m = new MyClass(); Console.WriteLine(GC.GetGeneration(m)); } 위에서 처럼 new를 통해 최초로 개체를 생성하면 이 개체는 0세대로 분류됩니다. 참고로 GC의 GetGeneration메서드를 사용하면 특정 개체의 세대를 확인할 수 있습니다. 이렇게 프로그램 내에서 생성되는 참조형식의 개체들은 0세대로 분류해 계속 힙메모리를 할당하다가 어느정도 용량이 커지게 되면 GC가 자동으로 실행되어 현재 0세대중 사용되지 않는 개체를 골라내어 .. 더보기