Monitor Your Network Activities

16 12 2008

سلام، کدی که امروز براتون آماده کردم در مورد مانیتور کردن فعالیت های شبکه از جمله مانیتور کردن Sent و Recieved اطلاعات، از طریق PerformanceCounter هست، اجازه بدین توضیح مختصری در مورد کلاس فوق بدم تا بعد به تشریح مختصر نمونه برنامه ای که براتون نوشتم بپردازم. با استفاده از کلاس PerformaceCounter که در namespace System.Diagnostics قرارداره شما می تونید اکثر فعالیت های منابع سیستمی رو مانیتور کنید از Processor گرفته تا Memory و Network. برای مثال فرض کنید شما نرم افزاری رو نوشتین و سعی دارین بدونید که نرم افزار طراحی شده چه مقدار از منابع سیستم مانند Cpu و Memory رو درگیر خودش می کنه تا بسته به اون نرم افزارتون رو بهینه کنید، به راحتی با Install کردن یک PerformanceCounter ( که انشاءالله در پست های بعدی نحوه ی Install کردن یک Counter رو از طریق نرم افزار براتون توضیح میدم )و مونیتور کردن با استفاده از CounterName مورد نظر می تونید به سهولت مشاهده کنید که نرم افزار چه مقدار از منابع سیستم رو اشغال کرده.

نگران استفاده از این امکان نباشید چون به صورت پیش فرض روی ویندوز نصب میشه و قابل دسترس هستش ( بر روی نسخه ی ویندوز 2000 و نسخه های بعدی ).

SaberSoft.NetmonTools

نمونه در حال اجرا

در این نمونه برنامه من از دو کلاس PerformanceCounterCategory و PerformanceCounter استفاده کردم که به ترتیب توضیحشون میدم. خیلی ساده، دلیل استفاده از کلاس اول که من از این پس ازش PCC یاد می کنم در این راستا بود که بتونم با استفاده از CountreName و InstanceName ای که در دست دارم نام Network Adapter های موجود در سیستم رو بدست بیارم.

//----/ Specify category to monitor it using PerformanceCounterCategory
PerformanceCounterCategory pcounter = new PerformanceCounterCategory("Network Interface");
//----/ Get network adapter name
string[] instanceNames = pcounter.GetInstanceNames();

در کد بالا پارامتر ورودی Constructor PCC نام دسته ای یا CategoryName هستش که باید استفاده بشه چون ما قصد داریم که فعالیت های شبکه رو مانیتور کنیم در اینجا از دسته Network Interface استفاده می کنیم. با استفاده از تابع GetInstanceNames نام  و یا هر چیزی که در زیر شاخه دسته Network Interface هستش رو بدست میاریم که در اینجا هدف ما بدست آوردن Network Adapter های موجود در سیستم هست.

servercategoryname

خوب و اما استفاده از PC ( PerformanceCounter ) ، ببینید در اول بحث گفتم که هدف من مانیتور کردن اطلاعات Sent & Recieved هستش، خوب هر کدوم از اونها نیازمند یک Instance از کلاس PC هستش، پس نتیجه میگیریم که من باید دو تا Instance از کلاس فوق رو ایجاد کنم که یکی رو برای مانیتور کردن  Download هام ( Recieved ) و دیگری رو برای مانیتور کردن Upload هام ( Sent ) استفاده می کنم.
//-----/ Here we want to monitor Network activity by counter name - 'Bytes Received/sec' and 'Bytes Sent/sec'
adapterInfo.DownloadCounter = new PerformanceCounter("Network Interface", "Bytes Received/sec", instanceName);
adapterInfo.UploadCounter = new PerformanceCounter("Network Interface", "Bytes Sent/sec", instanceName);

در کد بالا همانطور که مشاهده می کنید Constructor کلاس PC سه پارامتر رو به صورت ورودی دریافت میکنه که به ترتیب عبارتند از :

CategoryName = Network Interface
CounterName = Bytes Received/sec OR Bytes Sent/sec
InstanceName = Network Adapter Name

//----/ Get download and upload next raw value as Byte
m_DownloadValue = m_DownloadCounter.NextSample().RawValue;
m_UploadValue = m_UploadCounter.NextSample().RawValue;
//----------------------------------------------------

کد بالا مقدار خام پردازش نشده رو به بایت درون متغییر های تعریف شده قرار میده، در واقع عمل اصلی مانیتور کردن میزان Download و Upload در اینجا معنی پیدا می کنه.

توضیحات همراه سورس نمونه برنامه هست که می تونین دانلودش کنین و به صورت عملی کاملتر با موضوع آشنا بشین.

برای دانلود سورس کامل برنامه اینجا را کلیک کنید.

Advertisements

کارها

Information

4 responses

19 12 2008
Salar

بسیار جالب بود ممنون

یه نکته، بهتر نیست عنوان مطالب رو فارسی انتخاب کنی تا در نگاه اول قضیه مشخص تر باشه!

19 12 2008
codeprojects

ممنونم، حتما پیشنهادتون رو لحاظ می کنم.
ولی همکار خوبم حتما اعتقاد داری که در بحث های تخصصی عبارات انگلیسی شفافتر مفهوم رو میرسونن تا جملات فارسی. ( چون میشناسمت 🙂 )

2 10 2009
a

خیلی مفید بود

2 10 2009
a

فقط یک سوال داشتیم، اینکه فرض کنیم کل مقدار Send یا Receive را بخواهیم، در صورت بالا آمدن مجدد Windows و یا Hibernate شدن و … مشکلی پیش نمی آید؟ به عبارت دیگر Life cycle این Performance Counter ها چقدر است؟

پاسخی بگذارید

در پایین مشخصات خود را پر کنید یا برای ورود روی شمایل‌ها کلیک نمایید:

نشان‌وارهٔ وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

عکس گوگل+

شما در حال بیان دیدگاه با حساب کاربری Google+ خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s




%d وب‌نوشت‌نویس این را دوست دارند: