نمایش نتایج 1 تا 1 از 1

نام تاپیک: استفاده از کلاس StringBuilder

  1. #1

    استفاده از کلاس StringBuilder

    سلام
    در این تاپیک با نحوه تغییر داده محتویات رشته ها آشنا می شوید.
    از آن جایی که شی String غیر قابل تغییر است، هر بار که شما از یکی از متد های موجود در کلاس String استفاده می کنید، یک شی String جدید در حافظه ایجاد می نمائید که نیازمند تخصیص فضای جدید از حافظه می باشد.
    در مواردی که نیاز به اعمال تغییرات تکراری زیاد روی رشته ها دارید Overhead ناشی از ایجاد زیاد شی String می تواند پرهزینه باشد. کلاس System.Text.StringBuilder می تواند در هنگامی که نیاز به تغییر رشته بدون ایجاد نمونه ای جدید از آن دارید استفاده شود.
    به طور مثال استفاده از System.Text.StringBuilder می تواند منجر به بالابردن کارایی در هنگامی که چندین نمونه رشته را در یک حلقه با هم تلفیق می کنید بشود.

    ایجاد نمونه از روی System.Text.StringBuilder

    StringBuilder MyStringBuilder = new StringBuilder("Hello World!");


    تنظیم ظرفیت و طول

    گرچه کلاس System.Text.StringBuilder یک شیء پویاست که به شما اجازه می دهد تا تعداد کاراکترهای درون رشته ای که آن را کپسوله کرده است را بسط دهید، شما می توانید مقداری برای مشخص کردن حداکثر تعداد کاراکتری که می تواند نگهداری کند را تعیین کنید. این مقدار ظرفیت شی نامیده می شود و نباید با طول رشته ای که در حال حاضر StringBuilder نگهداری می کند اشتباه گرفته شود.

    مثلا شما ممکن است بخواهید یک نمونه از StringBuilder با مقدار "Hello" که دارای طول 5 می باشد ایجاد کنید و ممکن است حداکثر ظرفیت آن را 25 تعیین کنید. وقتی StringBuilder را تغییر می دهید تا زمانی که ظرفیتش کامل نشده حافظه مجددی برای خودش ایجاد نمی کند.
    هنگامی که ظرفیت تکمیل می شود، فضای جدید به طور خودکار تخصیص داده می شود و ظرفیت دو برابر می شود. شما می توانید ظرفیت این کلاس را با استفاده از یکی از متدهای Overload شده تعیین کنید. مثال زیر مشخص می کند که شیء MyStringBuilder می تواند به حداکثر 25 فضا بسط پیدا کند:

    StringBuilder MyStringBuilder = new StringBuilder("Hello World!", 25);


    از متد EnsureCapacity برای خصول اطمینان از اینکه ظرفیت StringBuilder حداقل برابر مقداری است که به شکل پارامتر به داخل این متد پاس می کنید استفاده کنید. اگر ظرفیت از مقدار ارسال شده بزرگتر باشد تغییری ایجاد نمی شود؛ اما اگر ظرفیت کمتر از مقدار ارسالی باشد ظرفیت کنونی تغییر می کند تا با مقدار ارسالی تطبیق پیدا کند.


    using System;
    using System.Text;

    class Sample
    {
    public static void Main()
    {
    StringBuilder sb1 = new StringBuilder("abc");
    StringBuilder sb2 = new StringBuilder("abc", 16);

    Console.WriteLine();
    Console.WriteLine("a1) sb1.Length = {0}, sb1.Capacity = {1}", sb1.Length, sb1.Capacity);
    Console.WriteLine("a2) sb2.Length = {0}, sb2.Capacity = {1}", sb2.Length, sb2.Capacity);
    Console.WriteLine("a3) sb1.ToString() = \"{0}\", sb2.ToString() = \"{1}\"",
    sb1.ToString(), sb2.ToString());
    Console.WriteLine("a4) sb1 equals sb2: {0}", sb1.Equals(sb2));

    Console.WriteLine();
    Console.WriteLine("Ensure sb1 has a capacity of at least 50 characters.");
    sb1.EnsureCapacity(50);

    Console.WriteLine();
    Console.WriteLine("b1) sb1.Length = {0}, sb1.Capacity = {1}", sb1.Length, sb1.Capacity);
    Console.WriteLine("b2) sb2.Length = {0}, sb2.Capacity = {1}", sb2.Length, sb2.Capacity);
    Console.WriteLine("b3) sb1.ToString() = \"{0}\", sb2.ToString() = \"{1}\"",
    sb1.ToString(), sb2.ToString());
    Console.WriteLine("b4) sb1 equals sb2: {0}", sb1.Equals(sb2));

    Console.WriteLine();
    Console.WriteLine("Set the length of sb1 to zero.");
    Console.WriteLine("Set the capacity of sb2 to 51 characters.");
    sb1.Length = 0;
    sb2.Capacity = 51;

    Console.WriteLine();
    Console.WriteLine("c1) sb1.Length = {0}, sb1.Capacity = {1}", sb1.Length, sb1.Capacity);
    Console.WriteLine("c2) sb2.Length = {0}, sb2.Capacity = {1}", sb2.Length, sb2.Capacity);
    Console.WriteLine("c3) sb1.ToString() = \"{0}\", sb2.ToString() = \"{1}\"",
    sb1.ToString(), sb2.ToString());
    Console.WriteLine("c4) sb1 equals sb2: {0}", sb1.Equals(sb2));
    }
    }
    /*
    The example displays the following output:

    a1) sb1.Length = 3, sb1.Capacity = 16
    a2) sb2.Length = 3, sb2.Capacity = 16
    a3) sb1.ToString() = "abc", sb2.ToString() = "abc"
    a4) sb1 equals sb2: True

    Ensure sb1 has a capacity of at least 50 characters.

    b1) sb1.Length = 3, sb1.Capacity = 50
    b2) sb2.Length = 3, sb2.Capacity = 16
    b3) sb1.ToString() = "abc", sb2.ToString() = "abc"
    b4) sb1 equals sb2: False

    Set the length of sb1 to zero.
    Set the capacity of sb2 to 51 characters.

    c1) sb1.Length = 0, sb1.Capacity = 50
    c2) sb2.Length = 3, sb2.Capacity = 51
    c3) sb1.ToString() = "", sb2.ToString() = "abc"
    c4) sb1 equals sb2: False
    */


    بیشتر:
    http://msdn.microsoft.com/en-us/library/2839d5h5
    آخرین ویرایش به وسیله tooraj_azizi_1035 : شنبه 10 تیر 1391 در 20:43 عصر

تاپیک های مشابه

  1. پاسخ: 14
    آخرین پست: دوشنبه 16 اردیبهشت 1392, 00:39 صبح
  2. استفاده از کلاس های نوشته شده
    نوشته شده توسط ealireza در بخش ASP.NET Web Forms
    پاسخ: 2
    آخرین پست: سه شنبه 07 فروردین 1386, 15:09 عصر
  3. تولید قفل نرم افزاری با استفاده از کلاس های Security
    نوشته شده توسط Amir Taghavi در بخش VB.NET
    پاسخ: 3
    آخرین پست: چهارشنبه 12 بهمن 1384, 22:59 عصر
  4. استفاده از کلاس های ATL در برنامه های MFC
    نوشته شده توسط taze kar در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 5
    آخرین پست: چهارشنبه 18 آبان 1384, 12:20 عصر
  5. مشکل در استفاده از کلاس pen
    نوشته شده توسط MF در بخش C#‎‎
    پاسخ: 1
    آخرین پست: سه شنبه 28 تیر 1384, 10:25 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •