2009-11-23 2 views
7

में एप्लिकेशन पूल अपटाइम प्राप्त करें क्या कोई तरीका है कि मैं निर्धारित कर सकता हूं कि सी # में एक एप्लिकेशन पूल (आईआईएस 7 में) कितना समय लगा है (शुरू होने के बाद से समय, या अंतिम पुनरारंभ)।सी #

+0

बाहरी रूप से, या आपके एएसपी.NET ऐप के भीतर? –

+0

बाहरी रूप से। मैं माइक्रोसॉफ्ट.Web.Administration.AplicationPool के साथ खेल रहा है, लेकिन मुझे समय तक कुछ भी नहीं दिख रहा है। – JPero

उत्तर

5

सच बेवकूफ चाल मिलना चाहिए: कुछ वर्ग है कि सब कुछ का उपयोग करता है, करने के लिए एक वर्ग के निर्माता का उपयोग अपना प्रारंभ समय याद रखें और इसे प्राप्त करने के लिए एएसपीएक्स पेज का उपयोग करें। अब वर्तमान समय की तुलना करें।

+0

कक्षा के निर्माता द्वारा आपका मतलब 'स्थिर' कन्स्ट्रक्टर है?चूंकि स्थैतिक कन्स्ट्रक्टर वह है जो आप इसके साथ करना चाहते हैं, मैंने कभी सोचा नहीं है कि आप इस तरह से कुछ हासिल करने के लिए एक स्थिर निर्माता का कितना आसानी से उपयोग कर सकते हैं। –

+0

आईएल में हाँ वर्ग कन्स्ट्रक्टर = सी # में स्थिर कन्स्ट्रक्टर। – Joshua

+0

ऐपडॉमेन को पुनर्नवीनीकरण (web.config बदलें) बिना ऐप पूल रीसाइक्लिंग किए जा सकते हैं (w3wp.exe प्रक्रिया)। यह स्थैतिक कन्स्ट्रक्टर केवल नवीनतम एपडोमेन को पुनरारंभ करेगा। यदि आपको वास्तव में ऐप पूल प्रक्रिया प्रारंभ समय की आवश्यकता है तो प्रक्रिया जानकारी उत्तर (@EricHumphrey) का उपयोग करें। – yzorg

3

ASP.NET अनुप्रयोग से, आप कोशिश कर सकते हैं TimeSpan uptime = (DateTime.Now - ProcessInfo.GetCurrentProcessInfo().StartTime)

8

DateTime.Now -। Process.GetCurrentProcess() StartTime

Process.GetCurrentProcessInfo() मौजूद नहीं है।

+0

दिलचस्प बात यह है कि यह एक एप्लिकेशन को पुनरारंभ करता है, इसलिए मुझे यकीन नहीं है कि यह कितना सटीक है। –

2

यदि आप पाते हैं कि Process.GetCurrentProcessInfo() का उल्लेख अन्य उपयोगकर्ता के रूप में मौजूद नहीं है,

System.Diagnostics.Process.GetCurrentProcess().StartTime 

आप के लिए काम कर सकते हैं।

(मैं एरिक हम्फ्रे की पोस्ट के लिए एक टिप्पणी के रूप में जोड़ना चाहता था, लेकिन मैं अनुमति नहीं कर रहा हूँ)

1

ऊपर के आधार पर मैं बहुत की तरह एक साधारण श्रेणी का निर्माण ..

public static class UptimeMonitor 
{ 
    static DateTime StartTime { get; set; } 

    static UptimeMonitor() 
    { 
     StartTime = DateTime.Now; 
    } 

    public static int UpTimeSeconds 
    { 
     get { return (int)Math.Round((DateTime.Now - StartTime).TotalSeconds,0); } 
    } 
} 

और कहा जाता है जैसे

var temp = UptimeMonitor.UpTimeSeconds; 

यह तो कहीं का उपयोग कर पहुँचा जा सकता है Global.asax.cs में Application_Start() में यह

UptimeMonitor.UpTimeSeconds 
0

दो दृष्टिकोणों में से एक मौजूद है जिसका मैं व्यक्तिगत रूप से उपयोग करता हूं। एक स्थिर वर्ग का उपयोग करना (जैसा कि @ Original10 के उत्तर में दिखाया गया है) या Application चर का उपयोग करना।

मुझे पता चला है कि Application चर का उपयोग स्वीकार्य है क्योंकि मैंने देखा है कि Process.GetCurrentProcess() एप्लिकेशन पुनरारंभ (जैसे web.config या bin निर्देशिका का संशोधन) से बचता है। मुझे कुछ ऐसी चीज चाहिए जो वेबसाइट को को फिर से शुरू करने के लिए को पूरा करेगी।

अपने Global.asax में, अपने कोड जहां आपको उसकी आवश्यकता में

public void Application_Start(Object sender, EventArgs e) 
{ 
    ... 
    Application["ApplicationStartTime"] = DateTime.Now.ToString("o"); 
} 

के लिए निम्न जोड़ने के लिए, आप की तरह कुछ कर सकता है:

var appStartTime = DateTime.MinValue; 
var appStartTimeValue = Web.HttpCurrent.Application["ApplicationStartTime"].ToString(); 

DateTime.TryParseExact(appStartTimeValue, "o", null, Globalization.DateTimeStyles.None, Out appStartTime); 
var uptime = (DateTime.Now - appStartTime).TotalSeconds 

var lsOutput = $"Application has been running since {appStartTime:o} - {uptime:n0} seconds." 

कौन सा की तर्ज पर कुछ का उत्पादन करेगा

Application has been running since 2018-02-16T10:00:56.4370974+00:00 - 10,166 seconds. 

आवेदन चर के किसी भी जांच की जांच नहीं है या आवेदन की लॉकिंग की आवश्यकता नहीं है घ। मैं इसे उपयोगकर्ता के लिए एक अभ्यास के रूप में छोड़ दूंगा।