Zum Fußzeileninhalt springen
.NET HILFE

C# Stopwatch (Wie es für Entwickler funktioniert)

In der weiten Landschaft der Programmiersprachen sticht C# als eine vielseitige und leistungsstarke Sprache hervor, die zur Entwicklung einer breiten Palette von Anwendungen verwendet wird, von Desktop-Anwendungen bis hin zu Web- und mobilen Anwendungen. Eines der wichtigsten Merkmale, die C# bei Entwicklern beliebt macht, ist die umfangreiche Bibliothek von Klassen und Methoden, die Lösungen für verschiedene Programmierherausforderungen bieten. Unter diesen Klassen nimmt die Stopwatch-Klasse eine besondere Stellung ein, da sie eine genaue Zeitmessung, Profilierung und Performance-Analyse ermöglicht.

In diesem Artikel werden wir sehen, wie man das Stopwatch-Objekt in C# verwendet, um die Zeitdauer für die Ausführung einer bestimmten Aufgabe mit der öffentlichen TimeSpan Elapsed-Eigenschaft zu ermitteln. Zusätzlich werden wir die insgesamt verstrichene Zeit für die PDF-Erstellung mit IronPDF for C# Developers messen.

1. Was ist die Stopwatch-Klasse?

Die Stopwatch-Klasse ist Teil des System.Diagnostics-Namespaces in C# und bietet eine einfache und effiziente Möglichkeit, verstrichene Zeit mit hoher Präzision zu messen. Sie wurde mit dem .NET Framework eingeführt und ist ein wertvolles Werkzeug für Entwickler, um die Ausführungszeit von Code-Segmenten zu verfolgen, die Performance zu optimieren und Anwendungen zu profilieren.

2. initialisierung und grundlegende Verwendung

Die Verwendung der Stopwatch-Klasse ist einfach. Um sie zu verwenden, müssen Sie zunächst eine neue Instanz der Stopwatch-Klasse erstellen:

using System.Diagnostics;

class Program
{
    static void Main()
    {
        // Create a new stopwatch instance for timing operations
        Stopwatch stopwatch = new Stopwatch();
    }
}
using System.Diagnostics;

class Program
{
    static void Main()
    {
        // Create a new stopwatch instance for timing operations
        Stopwatch stopwatch = new Stopwatch();
    }
}
Imports System.Diagnostics

Friend Class Program
	Shared Sub Main()
		' Create a new stopwatch instance for timing operations
		Dim stopwatch As New Stopwatch()
	End Sub
End Class
$vbLabelText   $csharpLabel

Sobald die Stopwatch-Instanz erstellt wurde, können Sie die Stoppuhr starten und stoppen, um die verstrichene Zeit zu messen:

using System;

class Program
{
    static void Main()
    {
        Stopwatch stopwatch = new Stopwatch();

        // Start timing
        stopwatch.Start();
        Console.WriteLine("It will measure the time between start and stop");

        // Stop timing
        stopwatch.Stop();
    }
}
using System;

class Program
{
    static void Main()
    {
        Stopwatch stopwatch = new Stopwatch();

        // Start timing
        stopwatch.Start();
        Console.WriteLine("It will measure the time between start and stop");

        // Stop timing
        stopwatch.Stop();
    }
}
Imports System

Friend Class Program
	Shared Sub Main()
		Dim stopwatch As New Stopwatch()

		' Start timing
		stopwatch.Start()
		Console.WriteLine("It will measure the time between start and stop")

		' Stop timing
		stopwatch.Stop()
	End Sub
End Class
$vbLabelText   $csharpLabel

Die verstrichene Zeit kann mit der Elapsed-Eigenschaft ermittelt werden:

using System;

class Program
{
    static void Main()
    {
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();

        // Simulate some work by sleeping for 2 seconds
        System.Threading.Thread.Sleep(2000);

        // Stop timing
        stopwatch.Stop();

        // Fetch the elapsed time
        TimeSpan elapsed = stopwatch.Elapsed;
        Console.WriteLine($"Elapsed time: {elapsed}");
    }
}
using System;

class Program
{
    static void Main()
    {
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();

        // Simulate some work by sleeping for 2 seconds
        System.Threading.Thread.Sleep(2000);

        // Stop timing
        stopwatch.Stop();

        // Fetch the elapsed time
        TimeSpan elapsed = stopwatch.Elapsed;
        Console.WriteLine($"Elapsed time: {elapsed}");
    }
}
Imports System

Friend Class Program
	Shared Sub Main()
		Dim stopwatch As New Stopwatch()
		stopwatch.Start()

		' Simulate some work by sleeping for 2 seconds
		System.Threading.Thread.Sleep(2000)

		' Stop timing
		stopwatch.Stop()

		' Fetch the elapsed time
		Dim elapsed As TimeSpan = stopwatch.Elapsed
		Console.WriteLine($"Elapsed time: {elapsed}")
	End Sub
End Class
$vbLabelText   $csharpLabel

Output:

C# Stopwatch (Wie sie für Entwickler funktioniert): Abbildung 1 - System-Timer-Ausgabe

3. erweiterte Funktionen der Stoppuhr

Die Stopwatch-Klasse bietet mehrere erweiterte Funktionen jenseits der grundlegenden Zeitmessung. Lassen Sie uns einige dieser Funktionen erkunden:

3.1. Neustart-Methode

Die Restart-Methode ist eine bequeme Möglichkeit, die verstrichene Zeit in einem Schritt zu stoppen und auf null zurückzusetzen. Dies kann nützlich sein, wenn die Ausführungszeiten mehrerer Code-Segmente gemessen werden sollen, ohne eine neue Stopwatch-Instanz zu erstellen.

using System;

class Program
{
    static void Main()
    {
        Stopwatch stopwatch = new Stopwatch();

        // Start timing
        stopwatch.Start();
        Console.WriteLine("The time will restart after executing the below code");

        // Restart timing
        stopwatch.Restart();

        // Simulate work
        System.Threading.Thread.Sleep(1000);

        // Stop timing
        stopwatch.Stop();

        // Fetch the elapsed time after restart
        TimeSpan elapsed = stopwatch.Elapsed;
        Console.WriteLine($"Total Elapsed time after Restart: {elapsed}");
    }
}
using System;

class Program
{
    static void Main()
    {
        Stopwatch stopwatch = new Stopwatch();

        // Start timing
        stopwatch.Start();
        Console.WriteLine("The time will restart after executing the below code");

        // Restart timing
        stopwatch.Restart();

        // Simulate work
        System.Threading.Thread.Sleep(1000);

        // Stop timing
        stopwatch.Stop();

        // Fetch the elapsed time after restart
        TimeSpan elapsed = stopwatch.Elapsed;
        Console.WriteLine($"Total Elapsed time after Restart: {elapsed}");
    }
}
Imports System

Friend Class Program
	Shared Sub Main()
		Dim stopwatch As New Stopwatch()

		' Start timing
		stopwatch.Start()
		Console.WriteLine("The time will restart after executing the below code")

		' Restart timing
		stopwatch.Restart()

		' Simulate work
		System.Threading.Thread.Sleep(1000)

		' Stop timing
		stopwatch.Stop()

		' Fetch the elapsed time after restart
		Dim elapsed As TimeSpan = stopwatch.Elapsed
		Console.WriteLine($"Total Elapsed time after Restart: {elapsed}")
	End Sub
End Class
$vbLabelText   $csharpLabel

Output:

C# Stopwatch (Wie sie für Entwickler funktioniert): Abbildung 2 - Neustart-Ausgabe

3.2. IsHighResolution Eigenschaft

Die IsHighResolution-Eigenschaft zeigt an, ob der zugrunde liegende Zeitmechanismus auf einem hochauflösenden Leistungsmesser basiert, um die verstrichene Zeit genau zu messen. Diese Eigenschaft abzufragen kann nützlich sein, wenn man es mit Systemen zu tun hat, die möglicherweise keine hochauflösenden Zeitmessmethoden unterstützen.

using System;

class Program
{
    static void Main()
    {
        if (Stopwatch.IsHighResolution)
        {
            Console.WriteLine("High-resolution timing is supported");
        }
        else
        {
            Console.WriteLine("Fallback to lower-resolution timing");
        }
    }
}
using System;

class Program
{
    static void Main()
    {
        if (Stopwatch.IsHighResolution)
        {
            Console.WriteLine("High-resolution timing is supported");
        }
        else
        {
            Console.WriteLine("Fallback to lower-resolution timing");
        }
    }
}
Imports System

Friend Class Program
	Shared Sub Main()
		If Stopwatch.IsHighResolution Then
			Console.WriteLine("High-resolution timing is supported")
		Else
			Console.WriteLine("Fallback to lower-resolution timing")
		End If
	End Sub
End Class
$vbLabelText   $csharpLabel

Output:

C# Stopwatch (Wie sie für Entwickler funktioniert): Abbildung 3 - Hochauflösendes Timing-Ausgabe

3.3. Eigenschaft Frequenz

Die Frequency-Eigenschaft gibt die Frequenz des zugrunde liegenden Timers in Ticks pro Sekunde zurück. Dieser Wert ist nützlich, um verstrichene Ticks in andere Zeiteinheiten wie Millisekunden zu konvertieren.

using System;

class Program
{
    static void Main()
    {
        long frequency = Stopwatch.Frequency;
        Console.WriteLine($"Timer Frequency: {frequency} ticks per second");
    }
}
using System;

class Program
{
    static void Main()
    {
        long frequency = Stopwatch.Frequency;
        Console.WriteLine($"Timer Frequency: {frequency} ticks per second");
    }
}
Imports System

Friend Class Program
	Shared Sub Main()
		Dim frequency As Long = Stopwatch.Frequency
		Console.WriteLine($"Timer Frequency: {frequency} ticks per second")
	End Sub
End Class
$vbLabelText   $csharpLabel

Output:

C# Stopwatch (Wie sie für Entwickler funktioniert): Abbildung 4 - Frequenz-Ausgabe

3.4. ElapsedTicks-Eigenschaft

Die ElapsedTicks-Eigenschaft bietet direkten Zugriff auf die rohe Tick-Anzahl, ohne sie in Zeiteinheiten konvertieren zu müssen. Dies kann nützlich sein, wenn man benutzerdefinierte Berechnungen durchführt oder es mit Low-Level-Zeitmessungsanforderungen zu tun hat.

using System;

class Program
{
    static void Main()
    {
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();

        // Simulate some work
        System.Threading.Thread.Sleep(1500);

        // Stop timing
        stopwatch.Stop();

        // Fetch the elapsed ticks
        long elapsedTicks = stopwatch.ElapsedTicks;
        Console.WriteLine($"Elapsed Ticks: {elapsedTicks}");
    }
}
using System;

class Program
{
    static void Main()
    {
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();

        // Simulate some work
        System.Threading.Thread.Sleep(1500);

        // Stop timing
        stopwatch.Stop();

        // Fetch the elapsed ticks
        long elapsedTicks = stopwatch.ElapsedTicks;
        Console.WriteLine($"Elapsed Ticks: {elapsedTicks}");
    }
}
Imports System

Friend Class Program
	Shared Sub Main()
		Dim stopwatch As New Stopwatch()
		stopwatch.Start()

		' Simulate some work
		System.Threading.Thread.Sleep(1500)

		' Stop timing
		stopwatch.Stop()

		' Fetch the elapsed ticks
		Dim elapsedTicks As Long = stopwatch.ElapsedTicks
		Console.WriteLine($"Elapsed Ticks: {elapsedTicks}")
	End Sub
End Class
$vbLabelText   $csharpLabel

Output:

C# Stopwatch (Wie sie für Entwickler funktioniert): Abbildung 5 - Verstrichene Ticks-Ausgabe

4. Einführung in IronPDF in C#;

IronPDF ist eine leistungsstarke C#-Bibliothek, die Entwicklern ermöglicht, mühelos PDF-Dokumente innerhalb ihrer .NET-Anwendungen zu erstellen, zu manipulieren und zu verarbeiten. Egal, ob Sie PDFs aus HTML, Bildern oder anderen Formaten erstellen möchten, stellt IronPDF ein umfassendes Set an Werkzeugen für die nahtlose Integration in Ihre C#-Projekte bereit.

IronPDF bietet die einzigartige Fähigkeit, HTML zu PDF zu konvertieren, wobei Layouts und Stile intakt bleiben. Diese Funktion ist ideal zur Erstellung von PDFs aus Webinhalten wie Berichten, Rechnungen oder Dokumentationen. Sie können HTML-Dateien, URLs und HTML-Strings in PDF-Dateien umwandeln.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        // Initialize the PDF renderer
        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");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        // Initialize the PDF renderer
        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");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Initialize the PDF renderer
		Dim renderer = New ChromePdfRenderer()

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

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

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

4.1. Installation von IronPDF in C#;

Um IronPDF in Ihrer C#-Anwendung zu verwenden, befolgen Sie diese einfachen Schritte:

  1. NuGet-Paket-Manager: Öffnen Sie Ihr C#-Projekt in Visual Studio und navigieren Sie zur Paket-Manager-Konsole. Führen Sie den folgenden Befehl aus, um IronPDF zu installieren:

    Install-Package IronPdf

    Alternativ können Sie die IronPDF NuGet-Paket-Seite verwenden, um das "IronPDF"-Paket herunterzuladen und zu installieren.

  2. Referenz im Code: Nach erfolgreicher Installation fügen Sie eine Referenz zu IronPDF in Ihren C#-Code ein:

    using IronPdf;
    using IronPdf;
    Imports IronPdf
    $vbLabelText   $csharpLabel

    Nun sind Sie bereit, die Möglichkeiten von IronPDF in Ihrer Anwendung zu nutzen.

4.2. Mit der C#-Stoppuhr die Zeit für die PDF-Erstellung aus einer URL messen

Lassen Sie uns nun demonstrieren, wie die Stopwatch-Klasse in C# verwendet wird, um die Zeit zu messen, die zur Erstellung eines PDFs von einer URL mit IronPDF benötigt wird:

using System;
using System.Diagnostics;
using IronPdf;

class Program
{
    static void Main()
    {
        // Initialize IronPDF Renderer
        IronPdf.HtmlToPdf Renderer = new IronPdf.HtmlToPdf();

        // Specify the URL for PDF generation
        string urlToConvert = "https://example.com";

        // Use Stopwatch to measure the time taken
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();

        // Create PDF from URL
        PdfDocument PDF = Renderer.RenderUrlAsPdf(urlToConvert);

        // Stop measuring elapsed time
        stopwatch.Stop();

        // Save the generated PDF to a file
        PDF.SaveAs("GeneratedPDF.pdf");

        // Display the time taken
        Console.WriteLine($"Time taken to create PDF from URL: {stopwatch.ElapsedMilliseconds} milliseconds");
    }
}
using System;
using System.Diagnostics;
using IronPdf;

class Program
{
    static void Main()
    {
        // Initialize IronPDF Renderer
        IronPdf.HtmlToPdf Renderer = new IronPdf.HtmlToPdf();

        // Specify the URL for PDF generation
        string urlToConvert = "https://example.com";

        // Use Stopwatch to measure the time taken
        Stopwatch stopwatch = new Stopwatch();
        stopwatch.Start();

        // Create PDF from URL
        PdfDocument PDF = Renderer.RenderUrlAsPdf(urlToConvert);

        // Stop measuring elapsed time
        stopwatch.Stop();

        // Save the generated PDF to a file
        PDF.SaveAs("GeneratedPDF.pdf");

        // Display the time taken
        Console.WriteLine($"Time taken to create PDF from URL: {stopwatch.ElapsedMilliseconds} milliseconds");
    }
}
Imports System
Imports System.Diagnostics
Imports IronPdf

Friend Class Program
	Shared Sub Main()
		' Initialize IronPDF Renderer
		Dim Renderer As New IronPdf.HtmlToPdf()

		' Specify the URL for PDF generation
		Dim urlToConvert As String = "https://example.com"

		' Use Stopwatch to measure the time taken
		Dim stopwatch As New Stopwatch()
		stopwatch.Start()

		' Create PDF from URL
		Dim PDF As PdfDocument = Renderer.RenderUrlAsPdf(urlToConvert)

		' Stop measuring elapsed time
		stopwatch.Stop()

		' Save the generated PDF to a file
		PDF.SaveAs("GeneratedPDF.pdf")

		' Display the time taken
		Console.WriteLine($"Time taken to create PDF from URL: {stopwatch.ElapsedMilliseconds} milliseconds")
	End Sub
End Class
$vbLabelText   $csharpLabel

Dieses Beispiel initialisiert IronPDF, verwendet die HtmlToPdf-Klasse, um ein PDF von einer bestimmten URL zu rendern, und misst die benötigte Zeit mit Stopwatch. Passen Sie die urlToConvert-Variable mit der gewünschten URL an, und Sie können den PDF-Erstellungsprozess weiter an Ihre Anwendungsanforderungen anpassen.

Output:

C# Stopwatch (Wie sie für Entwickler funktioniert): Abbildung 6 - PDF-Erstellungs-Timer-Ausgabe

5. Fazit

Abschließend steht die Stopwatch-Klasse in C# als zentrales Werkzeug für genaue Zeitmessung und Leistungsanalyse, die Entwicklern die Mittel bietet, um Code zu optimieren und die betriebliche Effizienz zu bewerten. Ihre intuitive Schnittstelle und erweiterten Funktionen machen sie vielseitig für verschiedene Zeitmessungsanforderungen. Darüber hinaus erweitert die Integration von IronPDF in C#-Projekten die Möglichkeiten der Sprache in der Manipulation von PDF-Dokumenten und bietet eine nahtlose Lösung zum Erstellen, Ändern und Verarbeiten von PDFs.

Das gezeigte Beispiel der Verwendung von Stopwatch zur Messung der Zeit, die zur Erstellung eines PDFs von einer URL mit IronPDF benötigt wird, zeigt die Synergie zwischen präzisem Zeit-Tracking und fortschrittlichen Bibliotheken auf und betont die Bedeutung einer präzisen Zeitmessung bei der Bewertung der Anwendungsleistung. Zusammen ermöglichen C#'s Stopwatch und IronPDF Entwicklern den Bau von leistungsstarken Anwendungen mit präziser Zeitmessung und vielseitigen PDF-Verarbeitungsmöglichkeiten.

Um Ihre kostenlose Testlizenz zur Erprobung der IronPDF-Funktionalität zu erhalten, besuchen Sie die IronPDF-Lizenzinformationsseite. Das vollständige Tutorial zur URL-zu-PDF-Konvertierung finden Sie im IronPDF-URL-zu-PDF-Tutorial.

Häufig gestellte Fragen

Wie hilft die Stopwatch-Klasse bei der Optimierung der Leistung einer C#-Anwendung?

Die Stopwatch-Klasse in C# ermöglicht es Entwicklern, die für die Ausführung von Code benötigte Zeit mit hoher Präzision zu messen. Durch die Verfolgung der verstrichenen Zeit können Entwickler Leistungsengpässe identifizieren und den Code für eine bessere Effizienz optimieren.

Welche fortgeschrittenen Funktionen bietet die Stopwatch-Klasse für C#-Entwickler?

Die Stopwatch-Klasse bietet erweiterte Funktionen wie die Restart-Methode zum Zurücksetzen und neu starten der Zeitmessung, IsHighResolution zum Überprüfen der Präzision der Systemzeitmessung, Frequency für die Zeitfrequenz und ElapsedTicks für granulare Zeitmessung.

Kann die Stopwatch-Klasse für hochauflösende Zeitmessung in allen Systemen verwendet werden?

Die Stopwatch-Klasse unterstützt hochauflösende Zeitmessung, wenn die Hardware des Systems dies ermöglicht. Entwickler können die IsHighResolution-Eigenschaft überprüfen, um festzustellen, ob ihr System hochauflösende Zeitmessung zulässt.

Wie können Sie HTML-Inhalt in einer C#-Anwendung in PDF umwandeln?

Sie können IronPDF verwenden, um HTML-Inhalte in einer C#-Anwendung in PDF umzuwandeln. IronPDF erhält die Layout- und Stilintegrität des HTML und eignet sich daher für die Erstellung hochwertiger PDF-Dokumente wie Berichte und Rechnungen.

Wie integrieren Sie Stopwatch in die PDF-Erstellung in C#?

Um Stopwatch in die PDF-Erstellung zu integrieren, starten Sie die Stopwatch, bevor Sie den PDF-Rendering-Prozess mit IronPDF initiieren. Sobald das PDF erstellt ist, stoppen Sie die Stopwatch, um die für den gesamten Prozess benötigte Zeit zu messen.

Wie ist der Prozess zur Installation einer PDF-Bibliothek in einem Visual Studio C#-Projekt?

In Visual Studio können Sie IronPDF mit dem NuGet-Paketmanager installieren. Führen Sie den Befehl Install-Package IronPdf in der Paketmanager-Konsole aus und fügen Sie using IronPdf; in Ihrem Code ein, um auf seine Funktionen zuzugreifen.

Warum ist die Stopwatch-Klasse entscheidend für die Leistungsoptimierung in C#?

Die Stopwatch-Klasse ist entscheidend für die Leistungsoptimierung, weil sie präzise Zeitfähigkeiten bietet, die Entwicklern helfen, die Ausführungszeit von Code zu messen und zu analysieren. Diese Informationen sind entscheidend, um langsame Operationen zu identifizieren und die Anwendungsleistung zu verbessern.

Jacob Mellor, Chief Technology Officer @ Team Iron
Chief Technology Officer

Jacob Mellor ist Chief Technology Officer bei Iron Software und ein visionärer Ingenieur, der führend in der C# PDF-Technologie ist. Als ursprünglicher Entwickler der Iron Software-Kerncodebasis hat er die Produktarchitektur des Unternehmens seit seiner Gründung gestaltet und zusammen mit CEO Cameron Rimington in ein Unternehmen ...

Weiterlesen