כיצד להשתמש בכיתת מאגר ב- C #

חיץ הוא רצף של בתים בזיכרון ואגירה היא מניפולציה של נתונים השוכנים בזיכרון. ב- .NET חוצץ מתייחס למניפולציה של הזיכרון הלא מנוהל, המיוצג כמערך של בתים. 

ייתכן שתרצה לנצל את מחלקת System.Buffer ב- .NET בכל פעם שאתה צריך לכתוב נתונים לזיכרון ישירות או בכל פעם שאתה רוצה לתפעל נתונים המאוחסנים בזיכרון לא מנוהל. מאמר זה מדבר על האופן שבו אנו יכולים לעבוד עם הכיתה Buffer ב- C #. 

כדי לעבוד עם דוגמאות הקוד המופיעות במאמר זה, עליך להתקין במערכת Visual Studio 2019 שלך. אם עדיין אין לך עותק, תוכל להוריד את Visual Studio 2019 כאן.

צור פרויקט יישומי קונסולת .NET Core ב- Visual Studio

ראשית, בואו ניצור פרויקט יישומי קונסולת .NET Core ב- Visual Studio. בהנחה ש- Visual Studio 2019 מותקן במערכת שלך, בצע את הצעדים המתוארים להלן כדי ליצור פרויקט יישום חדש של מסוף ה- NET Core ב- Visual Studio.

  1. הפעל את Visual Studio IDE.
  2. לחץ על "צור פרויקט חדש".
  3. בחלון "צור פרויקט חדש" בחר "יישום קונסולה (.NET Core)" מרשימת התבניות המוצגות.
  4. הקש "הבא.
  5. בחלון "הגדר את הפרויקט החדש שלך" שמוצג הבא, ציין את השם והמיקום של הפרויקט החדש.
  6. לחץ על צור.

פעולה זו תיצור פרויקט יישום קונסולת .NET Core חדש ב- Visual Studio 2019. נשתמש בפרויקט זה בחלקים הבאים במאמר זה.

שיטות מחלקת המאגר ב- .NET

מחלקת המאגר מכילה את השיטות הבאות:

  • BlockCopy (Array, Int32, Array, Int32) משמש להעתקת מערך מקור מקיזוז שצוין למערך יעד בקיזוז שצוין.
  • ByteLength (מערך) מחזיר את המספר הכולל של בתים במערך, כלומר את אורך המערך.
  • GetByte (Array, Int32) משמש לאחזור בתים במיקום מוגדר במערך.
  • SetByte (Array, Int32, Byte) משמש להגדרת בתים במיקום נתון במערך.
  • MemoryCopy (Void *, Void *, Int64, Int64) ו- MemoryCopy (Void *, Void *, UInt64, UInt64) משמשים להעתקת מספר בתים מכתובת מקור בזיכרון לכתובת אחרת.

שימוש במערכים ובמאגרים ב- C #

לפני שנתחיל לעבוד עם מחלקת המאגר וחבריה, בואו נחקור את מחלקת המערך הנוגעת למרחב השמות של המערכת. מחלקת ה- Array מכילה שיטה בשם Copy () בה ניתן להעתיק את תוכן מערך אחד למשנהו.

מחלקת המאגר במרחב השמות של המערכת מכילה שיטה בשם BlockCopy () שעושה את אותו הדבר. באפשרותך להשתמש ב- BlockCopy () כדי להעתיק את תוכן מערך המקור למערך יעד. יש לציין כי שיטת Buffer.BlockCopy מהירה בהרבה משיטת Array.Copy. מחלקת המאגר מכילה גם שיטות אחרות כגון ByteLength, GetByte ו- SetByte.

שים לב ששיטת BlockCopy אינה מעתיקה את האלמנטים של מערך המקור. במקום זאת, BlockCopy מעתיק רצף של בתים ממערך המקור למערך היעד.

העתק בתים בין שני מערכים ב- C #

תוכלו לנצל את שיטת Buffer.BlockCopy להעתקת בתים בין מערך מקור למערך יעד - כפי שמוצג בקטע הקוד המופיע להלן.

ריק סטטי ראשי ()

{

  קצר [] arr1 = חדש קצר [] {1, 2, 3, 4, 5};

  קצר [] arr2 = חדש קצר [10];

  int sourceOffset = 0;

  int destinationOffset = 0;

  ספירת int = 2 * sizeof (קצר);

  Buffer.BlockCopy (arr1, sourceOffset, arr2, destinationOffset, count);

  עבור (int i = 0; i <arr2.Length; i ++)

  {

      Console.WriteLine (arr2 [i]);

  }

  Console.ReadKey ();

}

כאשר אתה מבצע את התוכנית שלעיל, כך ייראה הפלט בחלון המסוף.

מצא את אורך הבתים של מערך ב- C #

כדי לברר את אורך המערך תוכלו לנצל את שיטת ה ByteLength של מחלקת ה- Buffer כפי שמוצג בדוגמת הקוד המופיעה למטה.

ריק סטטי ראשי ()

{

  קצר [] arr1 = חדש קצר [] {1, 2, 3, 4, 5};

  קצר [] arr2 = חדש קצר [10];

  Console.WriteLine ("אורך ה- arr1 הוא: {0}",

  Buffer.ByteLength (arr1));

  Console.WriteLine ("אורך ה- arr2 הוא: {0}",

  Buffer.ByteLength (arr2));

  Console.ReadKey ();

}

כאשר אתה מפעיל את התוכנית שלעיל, כך ייראה הפלט:

ניתן להשתמש בשיטות SetByte ו- GetByte במחלקת Buffer כדי להגדיר או לקרוא בתים בודדים אל מערך וממנו בהתאמה. קטע הקוד הבא ממחיש כיצד ניתן להשתמש בשיטות SetByte ו- GetByte.

ריק סטטי ראשי ()

{

קצר [] arr1 = {5, 25};

אורך int = Buffer.ByteLength (arr1);

Console.WriteLine ("\ n המערך המקורי הוא כדלקמן: -");

עבור (int i = 0; i <length; i ++)

{

      בתים b = Buffer.GetByte (arr1, i);

      Console.WriteLine (ב);

}

Buffer.SetByte (arr1, 0, 100);

Buffer.SetByte (arr1, 1, 100);

Console.WriteLine ("\ n המערך המתוקן הוא כדלקמן: -");

עבור (int i = 0; i <Buffer.ByteLength (arr1); i ++)

{

      בתים b = Buffer.GetByte (arr1, i);

      Console.WriteLine (ב);

}

    Console.ReadKey ();

}

כאשר אתה מבצע את התוכנית שלעיל, כך יופיע הפלט.

מחלקת ה- Buffer מספקת ביצועים טובים בהרבה בעת מניפולציה באזור זיכרון המכיל סוגים פרימיטיביים. עליך לנצל את מחלקת המאגר בכל פעם שאתה צריך לתפעל נתונים בזיכרון ובכל פעם שאתה זקוק לגישה מהירה גם לנתונים המאוחסנים בזיכרון.

כיצד לעשות יותר ב- C #:

  • כיצד להשתמש ב- HashSet ב- C #
  • כיצד להשתמש בפרמטרים בעלי שם ואופציונלי ב- C #
  • כיצד לשווג קוד C # באמצעות BenchmarkDotNet
  • כיצד להשתמש בממשקים שוטפים ושרשור שיטות ב- C #
  • כיצד בודקים יחידות שיטות סטטיות ב- C #
  • כיצד לשחזר את חפצי אלוהים ב- C #
  • כיצד להשתמש ב- ValueTask ב- C #
  • כיצד להשתמש בבלתי משתנה ב- C
  • כיצד להשתמש בקונסט, בקריאה בלבד ובסטטי ב- C #
  • כיצד להשתמש בהערות נתונים ב- C #
  • כיצד לעבוד עם GUIDs ב- C # 8
  • מתי להשתמש בכיתה מופשטת לעומת ממשק ב- C #
  • כיצד לעבוד עם AutoMapper ב- C #
  • כיצד להשתמש בביטויי למבדה ב- C #
  • כיצד לעבוד עם נציגי Action, Func ו- Predicate ב- C #
  • כיצד לעבוד עם נציגים ב- C #
  • כיצד ליישם לוגר פשוט ב- C #
  • כיצד לעבוד עם תכונות ב- C #
  • כיצד לעבוד עם log4net ב- C #
  • כיצד ליישם את דפוס עיצוב המאגר ב- C #
  • כיצד לעבוד עם השתקפות ב- C #
  • כיצד לעבוד עם מערכת קבצים ב- C #
  • כיצד לבצע אתחול עצל ב- C #
  • כיצד לעבוד עם MSMQ ב- C #
  • כיצד לעבוד עם שיטות הרחבה ב- C #
  • איך לנו ביטויים למבדה ב- C #
  • מתי להשתמש במילת המפתח ההפכפכה ב- C #
  • כיצד להשתמש במילת המפתח תשואה ב- C #
  • כיצד ליישם פולימורפיזם ב- C #
  • כיצד לבנות מתזמן משימות משלך ב- C #
  • כיצד לעבוד עם RabbitMQ ב- C #
  • איך לעבוד עם ציצית ב C #
  • חקר שיטות וירטואליות ומופשטות ב- C #
  • כיצד להשתמש ב- Dapper ORM ב- C #
  • כיצד להשתמש בתבנית העיצוב במשקל זבוב ב- C #