IRONSOFTWAREHOME
GELIŞTIRICI GÜNCELLEMELERI

C# Span (Geliştiriciler için Nasıl Çalışır)

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Jacob Mellor
Updated: 23 Nisan 2026

Span, C# 7.2'de System ad alanındaki Span yapısının bir parçası olarak tanıtılan bir türdür. Rastgele bellek birimlerinin kesintisiz bir bölgesini temsil etmek için tasarlanmıştır. Diziler veya yönetilen yığın gibi koleksiyonların aksine, Span yığında bulunan bellek veya işaret ettiği bellek bölgesine sahip değildir; bunun yerine mevcut bellek blokları üzerinde hafif bir görünüm sağlar. Bu özelliği, fazla yük ve güvensiz kod senaryolarına neden olmadan, bellek tamponları üzerinde etkili bir şekilde çalışmanız gereken senaryolarda Span'ı özellikle güçlü kılar. Bu makalenin ilerleyen bölümlerinde, IronPDF kütüphanesi'nin Iron Software tarafından tanıtımını da göreceğiz.

Span'ın Ana Özellikleri

1. Bellek Yönetimi

C# dilinde Span, geliştiricilerin doğrudan bellekle çalışmasına, geleneksel yığın tahsislerine başvurmadan izin verir. Mevcut diziler veya diğer bellek kaynaklarından bellek dilimleri oluşturmanın bir yolunu sunar, ek bellek kopyalarına olan ihtiyacı ortadan kaldırır.

2. Sıfır Kopyalama Soyutlamaları

C# Span'ın öne çıkan özelliklerinden biri sıfır kopyalama soyutlamalarıdır. Verileri kopyalamak yerine, Span mevcut belleği verimli bir şekilde referans almanın bir yolunu sağlar. Bu, özellikle büyük miktarda verinin kopyalanmasının pratik olmadığı ya da çok maliyetli olduğu senaryolarda faydalıdır.

3. İşaretçi Benzeri İşlemler

C# dili geleneksel olarak yüksek seviyeli, güvenli bir dil olmakla beraber, Span, C veya C++ dillerinde işaretçilerle çalışmaya benzer düşük seviyede bellek manipülasyonu derecesine sahiptir. Geliştiriciler, C#'ın güvenli ve yönetilen yapısından ödün vermeden işaretçi benzeri işlemler gerçekleştirebilirler.

4. Değiştirilemez Doğa

Düşük seviyeli bellek erişim kabiliyetlerine rağmen, C# Span değiştirilemez bir yapı olarak kalır. Bu, bellek manipülasyonuna izin verse de, istenmeyen değişikliklerin önüne geçerek güvenliği sağlar.

Örnek

using System;

class Program
{
    static void Main()
    {
        int[] array = { 1, 2, 3, 4, 5 };

        // Create a span that points to the entire array
        Span<int> span = array;

        // Modify the data using the span
        span[2] = 10;

        // Print the modified array
        foreach (var item in array)
        {
            Console.WriteLine(item);
        }
    }
}

ReadOnlySpan

Span değiştirebilir olup alttaki veriyi değiştirmeye izin verirken, ReadOnlySpan belleğin değiştirilemez bir görünümüdür. Verileri değiştirme ihtiyacınız olmadığı senaryolar için uygun hale getirir çünkü kesintisiz bir bellek bölgesine salt okunur bir arayüz sunar.

Burada bazı ana noktalar:

1. Salt Okunur Görünüm

Adından da anlaşılacağı gibi, ReadOnlySpan, bir bellek bloğunun salt okunur bir görünümünü oluşturmanıza olanak tanır. Bu, ReadOnlySpan aracılığıyla elemanları değiştiremeyeceğiniz anlamına gelir.

2. Bellek Temsili

Span gibi, ReadOnlySpan de işaret ettiği belleğe sahip değildir. Mevcut belleği referans alır ve dizilere, yığın tahsisli belleğe veya yerel belleğe işaret edebilir.

3. Performans Avantajları

Span gibi, ReadOnlySpan, özellikle büyük miktarda veriyi işlerken, daha iyi performans sunabilir; kopyalama gereksinimini azaltır.

4. Sınır Kontrolü Yoktur

Span gibi, ReadOnlySpan sınır kontrolü yapmaz. İşlemlerin, altta yatan bellek sınırları içerisinde kalmasını sağlamak geliştiricinin sorumluluğundadır.

5. Dizi Dilimleme ile Kullanımı

ReadOnlySpan dilimlemeyi destekler, bu da orijinal belleğin bir kısmına atıfta bulunan alt dilimler oluşturmanıza olanak tanır.

Örnek

using System;

class Program
{
    static void Main()
    {
        int[] array = { 1, 2, 3, 4, 5 };

        // Create a read-only span that points to the entire array
        ReadOnlySpan<int> readOnlySpan = array;

        // Access and print the data through the read-only span
        foreach (var item in readOnlySpan)
        {
            Console.WriteLine(item);
        }

        // Note: The following line would result in a compilation error since readOnlySpan is read-only.
        // readOnlySpan[2] = 10;
    }
}

ReadOnlySpan oluşturmak ve onunla çalışmak için birçok farklı yol vardır. Aşağıda bazı örnekler bulunmaktadır.

1. String'den ReadOnlySpan Üretmek

string msg = "Hello, World!";
ReadOnlySpan<char> span1 = msg.AsSpan();
// Read-only manipulation
char firstChar = span1[0];
Console.WriteLine(firstChar); // Outputs: H

2. Alt Dizilerle Çalışma

ReadOnlySpan<char> üzerinde Slice kullanın

// Example usage of Slice method on ReadOnlySpan<char>
ReadOnlySpan<char> spanFromString = "Sample String".AsSpan();
ReadOnlySpan<char> substringSpan = spanFromString.Slice(7, 6); // Extracts 'String'

3. Alt Diziyi Bir Yönteme Geçirmek

Yönteme parametre olarak ReadOnlySpan<char> geçirin.

void ProcessSubstringfromReadOnlySpan(ReadOnlySpan<char> substring)
{
    // Perform operations on the substring
}

// Usage
ReadOnlySpan<char> spanFromString = "Sample String".AsSpan();
ProcessSubstringfromReadOnlySpan(spanFromString.Slice(7, 6));

4. Bir Dizgiyi İçinde Arama Yapma

Bir dize içinde arama yapmak için ReadOnlySpan<char> ve IndexOf() kullanımı.

ReadOnlySpan<char> stringSpan = "Hello, World!".AsSpan();
int index = stringSpan.IndexOf('W');
Console.WriteLine(index); // Outputs: 7

5. Bellek Haritalı Dosyaları Kullanma

ReadOnlySpan<char>, bellek haritalı dosyalarla daha verimli olabilir.

using System;
using System.IO.MemoryMappedFiles;

class Program
{
    static void ProcessData(ReadOnlySpan<byte> data)
    {
        // Process data directly from the memory-mapped file
    }

    static void Main()
    {
        using (var memmf = MemoryMappedFile.CreateFromFile("data.bin"))
        {
            using (var accessor = memmf.CreateViewAccessor())
            {
                byte[] buffer = new byte[accessor.Capacity];
                accessor.ReadArray(0, buffer, 0, buffer.Length);

                ReadOnlySpan<byte> dataSpan = new ReadOnlySpan<byte>(buffer);
                ProcessData(dataSpan);
            }
        }
    }
}

6. Verimli Dize Manipülasyonu

ReadOnlySpan<char>, verimli dize manipülasyonu için kullanılabilir.

Span<char> newSpan = new char[6];
ReadOnlySpan<char> spanFromString = "Sample String".AsSpan().Slice(7, 6);
spanFromString.CopyTo(newSpan);
Console.WriteLine(new string(newSpan)); // Outputs: String

7. Alt Diziyi API'lere Geçme

Karakter aralıkları üzerinde çalışan harici kütüphaneler veya API'lerle çalışırken.

void ExternalApiMethod(ReadOnlySpan<char> data)
{
    // Call the external API with the character span
}

// Usage
ReadOnlySpan<char> spanFromString = "Sample String".AsSpan();
ExternalApiMethod(spanFromString.Slice(7, 6));

ReadOnlySpan<char>, özellikle bellek tahsisleri ve kopyalarının en aza indirgenmesi gereken senaryolarda dizgilerle daha verimli çalışmanın bir yolunu sunar. Performans açısından kritik kodları optimize etmek için güçlü bir araçtır ve özellikle büyük miktarda dize verisiyle uğraşırken faydalı olabilir.

Span'ın Sınırlamaları

Span, C# dilinde güçlü bir özellik ve birçok avantaj sunar, ancak kesintisiz ve kesintili bellek bağlamında belirli sınırlamalar ve dikkate alınması gereken hususlar vardır. Bu sınırlamaları keşfedelim:

1. Kesintisiz Bellek Tamponları

1.1 Otomatik Bellek Yönetimi Yoktur

Span, işaret ettiği belleği yönetmez. Bu, alttaki yönetilen bellek serbest bırakılırsa veya kapsam dışına çıkarsa, Span kullanmanın tanımsız davranışa veya potansiyel çöküşlere neden olacağı anlamına gelir. Geliştiriciler, Span kullanırken, alttaki belleğin hala geçerli olduğundan emin olmalıdır.

1.2 Çöp Toplama Yoktur

Span belleğe sahip olmadığından, çöp toplanmasına tabi değildir. Bu nedenle, yığın (stack) üzerinde tahsis edilmiş bellekle veya Span 'den daha kısa ömürlü bir bellekle çalışırken dikkatli olmanız gerekir.

1.3 Sınır Kontrolü Devre Dışıdır

Span ve ReadOnlySpan, varsayılan olarak sınır kontrolü yapmaz. Dikkatle kullanılmadığında geçersiz bellek lokasyonlarına erişime neden olabilir. Geliştiriciler, Span üzerindeki işlemlerin alttaki belleğin sınırları içinde kalmasını manuel olarak sağlamalıdır.

1.4 Kesintili Bellek için Destek Yoktur

Span, ardışık bellekle çalışacak şekilde tasarlanmıştır. Eğer ardışık olmayan belleğiniz varsa veya daha karmaşık veri yapıları temsil etmeniz gerekiyorsa, Span en uygun seçenek olmayabilir.

1.5 Tüm İşlemler Desteklenmez

Span, dilimleme, indeksleme ve yineleme gibi birçok yaygın işlemi desteklese de, tüm işlemler desteklenmez. Örneğin, bir Span'yi yeniden boyutlandıramazsınız ve alttaki belleğin uzunluğunu değiştiren belirli işlemler izin verilmez.

1.6 Sınırlı Platform Uyumluluğu

Span, .NET Standard ve .NET Core'un bir parçası olmasına rağmen, tüm platformlarda veya ortamlarda mevcut olmayabilir. Kodunuzda kullanmayı planlıyorsanız, hedef platformunuzun Span'yi desteklediğinden emin olmak önemlidir.

2. Kesintili Bellek Tamponları

2.1 Kesintili Bellek için Sınırlı Destek

ReadOnlySpan, öncelikle ardışık bellek blokları veya tamponlarla sorunsuz çalışacak şekilde tasarlanmıştır. Bellekte boşluklar içeren kesintili bellek tamponları veya yapıları içeren senaryolar için en uygun seçim olmayabilir.

2.2 Yapısal Sınırlamalar

Ardışık olmayan belleğe dayanan belirli veri yapıları veya senaryolar, ReadOnlySpan ile iyi uyum sağlamayabilir. Örneğin, bağlı listeler veya grafik yapılar gibi veri yapıları, ReadOnlySpan'nin ardışık bellek gereksinimi nedeniyle iyi uygun olmayabilir.

2.3 Karmaşık İşaretçi İşlemleri

Özellikle karmaşık işaretçi aritmetiği gerektiren ardışık olmayan bellekle ilgili durumlarda, ReadOnlySpan, C++ gibi dillerdeki ham işaretçiler kadar düşük seviyeli kontrol ve esneklik sunmayabilir. Bu tür durumlarda, işaretçilerle güvensiz kod kullanmak daha uygun olabilir.

2.4 Bazı API'lerde Doğrudan Destek Eksikliği

Ardışık bellek gibi, tüm API'ların veya kütüphanelerin, ReadOnlySpan ile temsil edilen ardışık olmayan belleği doğrudan desteklemeyebileceğini unutmayın. Bu tür senaryolara uyum sağlamak, uyumluluğu garantilemek için ek ara adımlar veya dönüştürmeler gerektirebilir.

Span ve Yönetilmeyen Bellek

C# dilinde, Span, yönetilmeyen bellekle etkin bir şekilde kullanılabilir, bellekle ilgili işlemleri kontrol altında ve verimli bir şekilde gerçekleştirebilir. Yönetilmeyen bellek, .NET çalıştırma ortamının bellek toplayıcısı tarafından yönetilmeyen bellektir ve genellikle yerel bellek tahsisleri ve serbest bırakma işlemlerini içerir. C# dilinde Span, yönetilmeyen bellekle şu şekilde kullanılabilir.

Yönetilmeyen Belleği Ayırma

Yönetilmeyen bellek ayırmak için System.Runtime.InteropServices.MemoryMarshal sınıfını kullanabilirsiniz. Marshal.AllocHGlobal yöntemi bellek ayırır ve ayrılan bloğa bir işaretçi döndürür. Ayrılan bellek veya bellek adresi, bir unmanagedMemory işaretçisinde tutulur ve okuma-yazma erişimi olacaktır. Belleğin bitişik bölgelerine kolayca erişilebilir.

using System;
using System.Runtime.InteropServices;

class Program
{
    static void Main()
    {
        const int bufferSize = 100;
        IntPtr unmanagedMemory = Marshal.AllocHGlobal(bufferSize);

        // Create a Span from the unmanaged memory
        Span<byte> span = new Span<byte>(unmanagedMemory.ToPointer(), bufferSize);

        // Use the Span as needed...
        
        // Don't forget to free the unmanaged memory when done
        Marshal.FreeHGlobal(unmanagedMemory);
    }
}

Yukarıdaki kaynak kodunda, Marshal.AllocHGlobal kullanarak yönetilmeyen bir bellek bloğu tahsis ediyoruz ve ardından yönetilmeyen bellekten elde edilen işaretçi ile bir Span<byte> oluşturuyoruz. Bu, tanıdık Span API'sini kullanarak yönetilmeyen bellekle çalışmamıza olanak sağlar. Yönetilmeyen bellekle çalışırken, belleğin ayırma ve ayırmama yönetiminden siz sorumlusunuz, bu not edilmesi önemli bir konudur.

Yönetilmeyen Belleğe ve Bellekten Veri Kopyalama

Span, yönetilen ve yönetilmeyen bellek arasında verileri verimli bir şekilde kopyalamak için kullanılabilecek Slice, CopyTo ve ToArray gibi yöntemler sağlar.

using System;
using System.Runtime.InteropServices;

class Program
{
    static void Main()
    {
        // Managed array to copy data from
        int[] sourceArray = { 1, 2, 3, 4, 5 };
        
        // Allocate unmanaged memory for the destination data
        IntPtr destinationPointer = Marshal.AllocHGlobal(sourceArray.Length * sizeof(int));
        try
        {
            // Create a Span<int> from the source array
            Span<int> sourceSpan = sourceArray;
            
            // Create a Span<int> from the allocated unmanaged memory
            Span<int> destinationSpan = new Span<int>(destinationPointer.ToPointer(), sourceArray.Length);
            
            // Copy data from the source Span<int> to the destination Span<int>
            sourceSpan.CopyTo(destinationSpan);
            
            // Print the values in the destination memory
            Console.WriteLine("Values in the destination memory:");
            foreach (var value in destinationSpan)
            {
                Console.Write($"{value} ");
            }
        }
        finally
        {
            // Deallocate the unmanaged memory when done
            Marshal.FreeHGlobal(destinationPointer);
        }
    }
}

Bu örnekte:

  • Marshal.AllocHGlobal, hedef veriler için yönetilmeyen belleği tahsis eder.
  • new Span<int>(destinationPointer.ToPointer(), sourceArray.Length), tahsis edilen yönetilmeyen bellekten bir Span<int> oluşturur.
  • sourceSpan.CopyTo(destinationSpan) yöntemi, verileri yönetilen diziden yönetilmeyen belleğe kopyalar.
  • Hedef bellekteki değerler, kopyalama işlemini doğrulamak için yazdırılır.
  • Marshal.FreeHGlobal(destinationPointer) yöntemi, iş bitince yönetilmeyen belleği ayırmak için kullanılır.

Güvenli Olmayan Kodu Kullanma

Yönetilmeyen bellekle uğraşırken, işaretçilerle birlikte güvenli olmayan kod da kullanabilirsiniz. Bu gibi durumlarda, Unsafe.AsPointer() yöntemi idaresi kullanılarak Span'dan bir işaretçi elde edebilirsiniz.

using System;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;

class Program
{
    static void Main()
    {
        const int bufferSize = 100;
        IntPtr unmanagedMemory = Marshal.AllocHGlobal(bufferSize);

        // Create a Span from the unmanaged memory
        Span<byte> span = new Span<byte>(unmanagedMemory.ToPointer(), bufferSize);

        // Use unsafe code to work with pointers
        unsafe
        {
            byte* pointer = (byte*)Unsafe.AsPointer(ref MemoryMarshal.GetReference(span));
            // Use the pointer as needed...
        }

        // Don't forget to free the unmanaged memory when done
        Marshal.FreeHGlobal(unmanagedMemory);
    }
}

Bu örnekte, Unsafe.AsPointer metodunu kullanarak Span'dan bir işaretçi elde ediyoruz. Bu, işaretçilerle doğrudan çalışırken güvenli olmayan kod kullanmamıza olanak tanır.

Yönetilmeyen bellekle çalışırken, bellek sızıntılarını önlemek için ayırma ve geri alma işlemlerini doğru bir şekilde yönetmek önemlidir. Her zaman uygun yöntemler kullanarak, örneğin Marshal.FreeHGlobal(), yönetilmeyen belleği serbest bırakın. Ayrıca, güvensiz kodu kullanırken dikkatli olunması gerektiğini unutmayın, çünkü yanlış idare edilirse potansiyel güvenlik riskleri doğurabilir.

Span ve Asenkron Metot Çağrıları

Span'i C# asenkron yöntem çağrıları ile birlikte kullanmak, özellikle büyük miktarda veri veya G/Ç işlemleri ile uğraşırken güçlü bir kombinasyondur. Amaç, verilerin gereksiz yere kopyalanmaması gereken asenkron işlemleri etkin bir şekilde ele almaktır. Asenkron senaryolarda Span'i nasıl kullanabileceğinizi keşfedelim:

1. Asenkron G/Ç İşlemleri:

Asenkron I/O işlemleri, örneğin bir akışa veri okuma veya yazma ile uğraşırken, ek tamponlar oluşturmadan verilerle verimli bir şekilde çalışmak için Memory veya Span kullanabilirsiniz.

using System;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task ProcessDataAsync(Stream stream)
    {
        const int bufferSize = 4096;
        byte[] buffer = new byte[bufferSize];
        while (true)
        {
            int bytesRead = await stream.ReadAsync(buffer.AsMemory());
            if (bytesRead == 0)
                break;

            // Process the data using Span without unnecessary copying
            ProcessData(buffer.AsSpan(0, bytesRead));
        }
    }

    static void ProcessData(Span<byte> data)
    {
        // Perform operations on the data
    }
}

Bu örnekte, ReadAsync metodu, arabelleğe bir akıştan asenkron olarak veri okur. Ardından ProcessData metodu, verileri başka bir arabelleğe kopyalamadan doğrudan Span<byte> üzerinden işler.

2. Asenkron Dosya İşlemleri:

G/Ç işlemlerine benzer şekilde, asenkron dosya işlemleriyle uğraşırken, Span kullanarak ek kopyalama yapmadan etkin bir şekilde verileri işleyebilirsiniz.

using System;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task ProcessFileAsync(string filePath)
    {
        const int bufferSize = 4096;
        using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
        {
            byte[] buffer = new byte[bufferSize];
            while (true)
            {
                int bytesRead = await fileStream.ReadAsync(buffer.AsMemory());
                if (bytesRead == 0)
                    break;

                // Process the data using Span without unnecessary copying
                ProcessData(buffer.AsSpan(0, bytesRead));
            }
        }
    }

    static void ProcessData(Span<byte> data)
    {
        // Perform operations on the data
    }
}

Burada, ReadAsync metodu bir dosya akışından arabelleğe veri okur ve ProcessData metodu verileri doğrudan Span<byte> üzerinden işler.

3. Asenkron Görev İşleme:

Veri üreten veya tüketen asenkron görevlerle çalışırken, gereksiz kopyalamalardan kaçınmak için Memory veya Span kullanabilirsiniz.

using System;
using System.Linq;
using System.Threading.Tasks;

class Program
{
    static async Task<int> ProcessDataAsync(int[] data)
    {
        // Asynchronous processing of data
        await Task.Delay(1000);
        // Returning the length of the processed data
        return data.Length;
    }

    static async Task Main()
    {
        int[] inputData = Enumerable.Range(1, 1000).ToArray();
        
        // Process the data asynchronously without copying
        int processedLength = await ProcessDataAsync(inputData.AsMemory());
        Console.WriteLine($"Processed data length: {processedLength}");
    }
}

Bu örnekte ProcessDataAsync metodu, verileri asenkron olarak işler ve ek kopyalama gerektirmeden işlenen verilerin uzunluğunu döndürür.

IronPDF Tanıtımı

IronPDF kütüphanesi genel bakış, Iron Software'den en son C# PDF kütüphanesidir ve C# kodu kullanılarak dinamik olarak güzel PDF belgeleri oluşturmak için kullanılabilir. IronPDF, HTML'den PDF oluşturma, HTML içeriğini PDF'ye dönüştürme, PDF dosyalarını birleştirme veya bölme gibi çeşitli özellikler sunar.

IronPDF'nin ana özelliği, düzenleri ve stilleri koruyan HTML'den PDF'ye dönüştürme işlevselliğidir. Web içeriğinden PDF'ler üretebilir, bu da onu raporlar, faturalar ve dökümantasyon için harika kılar. Bu araç, HTML dosyalarını, URL'leri ve HTML dizelerini PDF dosyalarına dönüştürmeyi destekler.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

Kurulum

IronPDF, NuGet paket yöneticisi for IronPDF konsolu kullanılarak ya da Visual Studio paket yöneticisi kullanılarak kurulabilir.

dotnet add package IronPdf

C# Span (How It Works For Developers): Figure 1 - Install IronPDF using NuGet Package Manager by searching "IronPDF" in the search bar of NuGet Package Manager

using System;
using IronPdf;

class Program
{
    static void Main()
    {
        Console.WriteLine("Generating PDF using IronPDF.");
        var displayFirstName = "<p>First Name is Joe</p>".AsSpan();
        var displayLastName = "<p>Last Name is Doe</p>".AsSpan();
        var displayAddress = "<p>12th Main, 7Th Cross, New York</p>".AsSpan();
        var start = "<html><body>".AsSpan();
        var end = "</body></html>".AsSpan();
        var content = string.Concat(start.ToString(), displayFirstName.ToString(), displayLastName.ToString(), displayAddress.ToString(), end.ToString());
        var pdfDocument = new ChromePdfRenderer();
        pdfDocument.RenderHtmlAsPdf(content).SaveAs("span.pdf");
    }
}

Bu örnekte, bir PDF belgesi oluşturmak için Span ile birlikte IronPDF kullanıyoruz.

Çıktı:

C# Span (Geliştiriciler İçin Nasıl Çalışır): Şekil 2 - Konsol Çıktısı

Oluşturulan PDF:

C# Span (Geliştiriciler İçin Nasıl Çalışır): Şekil 3 - PDF Çıktısı

Lisanslama (Ücretsiz Deneme Mevcuttur)

IronPDF lisans bilgisi. Bu anahtar appsettings.json dosyasına yerleştirilmelidir.

"IronPdf.LicenseKey": "your license key"
JSON

Deneme lisansı almak için e-posta adresinizi sağlayın.

Sonuç

C#'ta Span, bellekle çalışmak için güçlü ve verimli bir yol sunar, performans ve esneklik açısından avantajlar sağlar. Sahip olmadıkları, bitişik yapısı, bellek tahsislerini ve kopyalamayı en aza indirmek gereken senaryolar için onu özellikle uygun kılar. Span'i kullanarak, geliştiriciler dizi manipülasyonundan yüksek performanslı sayısal işlemeye kadar çeşitli uygulamalarda daha iyi performans elde edebilirler. Özelliklerini anlayarak ve sınırlamalarını göz önünde bulundurarak, geliştiriciler çeşitli bellek manipülasyon görevlerinde Span'yi güvenli ve verimli bir şekilde kullanabilirler. IronPDF kütüphanesi genel bakış ile birlikte, beklemeksizin ve sonuç sınırları olmadan harika PDF belgeleri oluşturmak için kullanılabilir.

Lütfen IronPDF'nin Hızlı Başlangıç Kılavuzu Sayfası sayfasını ziyaret edin.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Teknoloji Direktörü

Jacob Mellor, Iron Software'de Baş Teknoloji Yöneticisidir ve C# PDF teknolojisinde öncü bir mühendisdir. Iron Software'ın ana kod tabanının ilk geliştiricisi olarak, CEO Cameron Rimington ile birlikte şirketin ürün mimarisini 50'den fazla kişilik bir şirkete dönüştürmüştür ve NASA, Tesla ve dünya genelindeki devlet kurumlarına hizmet etmektedir.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez