C# - SandCastle을 위한 주석 예제


c# 코드 문서화를 위한 SandCastle 예제입니다.
설치 및 설명은 이전 포스트를 참조하세요.
http://kimstar.pe.kr/blog/96

using System;
using System.Runtime.InteropServices;


namespace Inticube.Lib.Util
{
    /// <summary>
    /// 시간을 측정하는 기능을 구현한 class.
    /// </summary>
    /// <author>KimStar</author>
    /// <remarks>
    /// <b>2008.09.01</b> 변경이력을 기술한다.<br/>
    /// <b>2008.09.02</b> 홍길동이 수정했음
    /// </remarks>
    public class StopWatch
    {
        [DllImport("kernel32.dll", CallingConvention = CallingConvention.Winapi)]
        private static extern bool QueryPerformanceFrequency(out long frequency);

        [DllImport("kernel32.dll", CallingConvention = CallingConvention.Winapi)]
        private static extern bool QueryPerformanceCounter(out long counter);

        /// <summary>
        /// GetElapsedTime() 함수가 반환하는 시간의 단위를 지정할 때 쓰이는 enum.
        /// </summary>
        public enum TIME_UNIT
        {
            /// <summary>초 단위.</summary>
            SECOND,

            /// <summary>밀리초 단위. (1/1000초)</summary>
            MILLISECOND,

            /// <summary>마이크로초 단위. (1/1000000초)</summary>
            MICROSECOND,

            /// <summary>나노초 단위. (1/1000000000초)</summary>
            NANOSECOND
        }

        private long frequency;                                     // high-resolution counter의 frequency를 저장하는 변수.
        private long startCount;                                    // 시간을 재기 시작한 순간의 counter 값.

        /// <summary>
        /// StopWatch의 생성자 
        /// </summary>
        /// <remarks>
        /// 2008.09.02 Kimstar 수정했음
        /// </remarks>
        public StopWatch()
        {
            QueryPerformanceFrequency(out frequency);
            Start();
        }

        /// <summary>
        /// 시간을 재기 시작하는 function.
        /// </summary>
        /// <remarks>
        /// 2008.09.02 Kimstar 수정했음
        /// </remarks>
        public void Start()
        {
            QueryPerformanceCounter(out startCount);
        }

        /// <summary>
        /// Start() 함수를 호출한 시각부터 흐른 시간을 반환해주는 function.
        /// </summary>
        /// <param name="timeUnit">반환할 시간의 단위.</param>
        /// <param name="resetTimer">진행된 시간을 반환함과 동시에 타임를 리셋할 것인가를 나타낸다. 만약 타이머를 리셋하면
        /// 다음번 이 함수를 호출할 때에는 이 함수를 호출한 시점부터 진행된 시간을 반환하게 된다.</param>
        /// <returns>진행된 시간을 반환한다.</returns>
        /// <exception cref="System.Exception">오류발생 예외를 발생합니다.</exception>
        /// 
        /// <example> 아래 예제는 흐른 시간을 구하는 예제이다.
        /// <code>
        /// private StopWatch sw = new StopWatch();
        /// sw.Start();
        /// global::System.Windows.Forms.MessageBox.Show("Elapsed Time : " + sw.GetElapsedTime(StopWatch.TIME_UNIT.MILLISECOND, true).ToString() + "milli second");
        /// </code>
        /// </example>
        /// 
        /// <remarks>
        /// 2009.01.01 Kimstar 최초 작성<br/>
        /// 2008.09.02 Kimstar 수정. 뭐뭐뭐를 수정했음.
        /// </remarks>
        public long GetElapsedTime(TIME_UNIT timeUnit, bool resetTimer)
        {
            try
            {
                // 현재 카운터 값 구하기.
                long currentCount;
                QueryPerformanceCounter(out currentCount);

                // 진행된 시간을 초 단위로 구하기.
                double elapsedTime = (currentCount - startCount) / (double)frequency;

                // 타이머를 리셋하도록 한 경우.
                if (resetTimer)
                {
                    startCount = currentCount;
                }

                // 진행된 시간 반환.
                switch (timeUnit)
                {
                    case TIME_UNIT.SECOND: return (long)(elapsedTime * 1);
                    case TIME_UNIT.MILLISECOND: return (long)(elapsedTime * 1000);
                    case TIME_UNIT.MICROSECOND: return (long)(elapsedTime * 1000000);
                    case TIME_UNIT.NANOSECOND: return (long)(elapsedTime * 1000000000);
                }

                return 0;
            }
            catch (Exception ex)
            {
                throw new System.Exception(ex.Message);
            }
        }
    }
}

광고

댓글 남기기