Esempio n. 1
0
        //ManualResetEvent m_mreWaitForSample = new ManualResetEvent(false);
        /// <summary>
        /// takes several callstack samples from the process over time and creates a call tree, where performance issues can be evaluated.
        /// </summary>
        /// <param name="onlyMainThread"></param>
        /// <returns>a dictionary of [threadId,StackTreeRoot]</returns>
        public Dictionary<int, StackTreeNode> GetPerformanceSample(bool onlyMainThread = false)
        {
            ProcessSampler sampler = new ProcessSampler(onlyMainThread);
            if (m_blnIsListening)
            {
                throw new Exception("can't take samples while listning!");
                //if (m_process.IsRunning)
                //{
                //    m_process.AsyncStop().WaitOne();
                //    m_process.CorProcess.Stop(0);
                //}
                //List<ProcessSample> sample = sampler.GetSample(m_process, 20, 200);
                //return sampler.CreateStackTrees(sample);

            }
            else
            {
                int timeBetweenSamples = Config.GetIntValue(Config.PerfTimeBetweenSamples);
                if (timeBetweenSamples == int.MinValue)
                    timeBetweenSamples = 400;
                List<ProcessSample> sample = sampler.GetSample(m_processId, m_intNumSamplesInPerf, timeBetweenSamples, false, true);
                return sampler.CreateStackTrees(sample);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// takes a single callstack snapshot from the process.
        /// </summary>
        /// <param name="onlyMainThread"></param>
        /// <returns></returns>
        public List<ProcessSample> GetCallStacks(bool onlyMainThread = false, bool extraDetails = false)
        {
            List<ProcessSample> sample;
            ProcessSampler sampler = new ProcessSampler(onlyMainThread);
            if (m_blnIsListening)
            {
                throw new Exception("can't take samples while listning!");
                //if (m_process.IsRunning)
                //{
                //    m_process.AsyncStop().WaitOne();
                //    m_process.CorProcess.Stop(0);
                //}

                //sample = sampler.GetSample(m_process, 1, 200);
            }
            else
            {
                sample = sampler.GetSample(m_processId, 1, 200, extraDetails);

            }
            return sample;
        }