Dominique Louis 177b9c2f2c Ensure all projects have a .config directory. 2 月之前
..
.config 177b9c2f2c Ensure all projects have a .config directory. 2 月之前
.vscode 787aa50223 History Reset and Projects updated to SDK and MG 3.8.* 2 月之前
Core 787aa50223 History Reset and Projects updated to SDK and MG 3.8.* 2 月之前
Platforms 787aa50223 History Reset and Projects updated to SDK and MG 3.8.* 2 月之前
PerformanceMeasuring.sln 787aa50223 History Reset and Projects updated to SDK and MG 3.8.* 2 月之前
README.md 787aa50223 History Reset and Projects updated to SDK and MG 3.8.* 2 月之前

README.md

Performance Measuring Sample

This is a MonoGame 3.8.* sample project that demonstrates how to use the GameDebugTools to measure the performance of a game, as well as how the number of objects and interactions between them can affect performance.

Project Structure

Solution Structure

The solution is organized into platform-specific projects and a shared core library:

  • Core/PerformanceMeasuring.Core.csproj – Shared game logic, primitives, and debug tools
  • Platforms/Windows/PerformanceMeasuring.Windows.csproj – Windows DirectX version (net8.0-windows)
  • Platforms/DesktopGL/PerformanceMeasuring.DesktopGL.csproj – Cross-platform OpenGL version (net8.0)
  • Platforms/Android/PerformanceMeasuring.Android.csproj – Android version (net8.0-android)
  • Platforms/iOS/PerformanceMeasuring.iOS.csproj – iOS version (net8.0-ios)

Each platform project references the shared Core project and includes only platform-specific entry points and configuration.

Features

  • Real-time performance monitoring using GameDebugTools
  • Dynamic sphere simulation with collision detection
  • Configurable number of objects to test performance impact
  • Cross-platform compatibility

Controls

Desktop (Windows/DesktopGL)

  • X - Toggle collisions on/off
  • Up Arrow - Increase number of spheres
  • Down Arrow - Decrease number of spheres

Android

  • Tap - Toggle collisions on/off
  • Drag up/down - Change number of spheres

Building and Running

Prerequisites

  • .NET 8.0 SDK or later
  • For Android: Android SDK and workload installed (dotnet workload install android)

Building from Command Line

Windows

dotnet build Platforms/Windows/PerformanceMeasuring.Windows.csproj
dotnet run --project Platforms/Windows/PerformanceMeasuring.Windows.csproj

DesktopGL (Cross-platform)

dotnet build Platforms/DesktopGL/PerformanceMeasuring.DesktopGL.csproj
dotnet run --project Platforms/DesktopGL/PerformanceMeasuring.DesktopGL.csproj

Android

dotnet build Platforms/Android/PerformanceMeasuring.Android.csproj

iOS

dotnet build Platforms/iOS/PerformanceMeasuring.iOS.csproj

Building with Visual Studio

Open PerformanceMeasuring.sln in Visual Studio and build/run the desired platform project.

Building with VS Code

The project includes VS Code tasks and launch configurations:

  1. Build tasks (Ctrl+Shift+P → "Tasks: Run Task"):

    • build-windows - Build Windows version
    • build-desktopgl - Build DesktopGL version
    • build-android - Build Android version
    • clean - Clean all projects
  2. Run/Debug (F5):

    • "Launch Windows" - Run Windows version with debugger
    • "Launch DesktopGL" - Run DesktopGL version with debugger

Content Pipeline

This project uses pre-built .xnb content files located in the Content/ folder. No Content Pipeline rebuild is required.

Dependencies

  • MonoGame.Framework.WindowsDX 3.8.* (Windows)
  • MonoGame.Framework.DesktopGL 3.8.* (DesktopGL)
  • MonoGame.Framework.Android 3.8.* (Android)
  • MonoGame.Framework.iOS 3.8.* (iOS)

Platform Support

  • Windows – Fully supported, builds and runs
  • DesktopGL – Fully supported, builds and runs (Linux, macOS, Windows)
  • Android – Builds successfully (requires Android SDK for deployment)
  • 🟡 iOS – Entry point and project included (requires .NET iOS workload for deployment)

Performance Monitoring

The sample includes several debug tools:

  • FPS Counter - Real-time frame rate display
  • Time Ruler - Performance profiling bars
  • Debug Manager - Command system for runtime debugging

Use these tools to observe how increasing the number of spheres and enabling/disabling collisions affects performance.