Пример #1
0
            public ulong StartSpan(long methodID)
            {
                ulong  idx = _nextIdx++;
                MSpan *s   = _mSpan + idx;

                s->methodID = methodID;
                s->startMS  = _sw.ElapsedMilliseconds;
                return(idx);
            }
Пример #2
0
        static void OnAppExit(object sender, EventArgs e)
        {
            Console.WriteLine("MStats.OnAppExit");

            foreach (MThread t in _mThread)
            {
                for (int i = 0; i < (int)t._nextIdx; i++)
                {
                    MSpan *s = t._mSpan + i;
                    Console.WriteLine("t: {0}, mID: {1}, start: {2}, end: {3}", i, s->methodID, s->startMS, s->endMS);
                }
            }
        }
Пример #3
0
        public static void Setup()
        {
            if (_ready)
            {
                return;
            }

            Console.WriteLine("MStats.Setup");
            _ready = true;

            _mSpanHeapHandle = Marshal.AllocHGlobal((IntPtr)MAX_HEAP_SIZE);
            _mSpanHeap       = (MSpan *)_mSpanHeapHandle.ToPointer();

            _mThreadIdx = 0;
            _threadID   = new ThreadLocal <int>();
            _mThreadMap = new ConcurrentDictionary <int, int>();

            for (int i = 0; i < _mThread.Length; i++)
            {
                _mThread[i] = new MThread(_mSpanHeap + (MAX_THREAD_HEAP_SIZE * i));
            }

            AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnAppExit);
        }
Пример #4
0
            public void EndSpan(ulong mSpanID)
            {
                MSpan *s = _mSpan + mSpanID;

                s->endMS = _sw.ElapsedMilliseconds;
            }
Пример #5
0
 public MThread(MSpan *mSpan)
 {
     _nextIdx = 0;
     _mSpan   = mSpan;
     _sw      = Stopwatch.StartNew();
 }