Protobuf.NET
bloaty
Our great sponsors
Protobuf.NET | bloaty | |
---|---|---|
10 | 15 | |
4,525 | 4,541 | |
1.5% | 1.0% | |
6.2 | 5.3 | |
6 days ago | about 1 month ago | |
C# | C++ | |
GNU General Public License v3.0 or later | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
Protobuf.NET
-
ProtoBuf message serialization in Akka.NET using protobuf-net
This article requires that reader is familar with core concept of Akka.NET serialization (see https://getakka.net/articles/serialization/serialization.html) and ProtoBuf-Net library (see https://github.com/protobuf-net/protobuf-net).
-
Auto-Incrementing Sequences
The model used, a simple invoice which uses protobuf-net 1 NuGet package to store information in a binary file.
-
A .NET source generator for generating object mappings. Trimming save and fast. Inspired by MapStruct.
Not sure if it works with gRPC but I really like how Protobuf.NET uses attributes like other serializers instead of needing to write a .proto and generate (not-very-C#-friendly) classes from it. Well, until you need to interop with other languages.
-
Practice resources for handling and optimizing large game data sets?
I mentioned JSON, but there are many formats that are much more efficient. I can mention FlatBuffers, MessagePack and ProtoBuf. These are the ones I've used myself, and personally I'm most comfortable with MessagePack and ProtoBuf. I don't think the performance would be an issue if you had to choose between these three, it's mostly the API that is different.
-
Automatically generate proxy services for blazor wasm+asp.net core?
The closest way would be using Grpc.Web + Protobuf.net. The overall experience is pretty close to WCF server + Client where you share a common interface and let the client and server just call through those.
-
gRPC Development experience in modern .NET
Grpc Web with Blazor WASM is a really pleasant experience so far imo for my personal projects at home. You have strongly typed models and methods and you have choice on sharing the contract between client and server if you're using code first instead of proto IDL files (e.g. protobuf-net).
- What is your preferred way of creating application specific files for a local application?
-
Integrating Apollo Studio with GraphQL for .NET - Part 2
It's pretty straight-forward to follow the protobuf-net docs to serialize the report, but we should really GZIP the stream for sending to reduce bandwidth consumption and improve performance:
-
Integrating Apollo Studio with GraphQL for .NET - Part 1
There are a number of Protobuf implementations for .NET Core, but I like protobuf-net as it's a nice, clean, Apache 2.0 Licensed implementation. It is also supported by protogen, a great online generator that will output protobuf-net classes ready for use (for its CSharp profile). If you open the latest schema from the link here, you can simply paste into the generator. NOTE: At the time of writing, [(js_preEncoded)=true] isn't supported by the generator, and can be removed from the proto schema.
-
Don't Use Protobuf for Telemetry
> Protobuf-java is a little heavy [...] Just depending on the library adds 1.6MB and nearly 700 classes before you even generate your own message classes.
By comparison, protobuf-net [1] is about 260KB and 68 classes. Python's [2] is a 1MB package download (with source).
Why's the Java one so big?
[1] https://github.com/protobuf-net/protobuf-net
[2] https://pypi.org/project/protobuf
bloaty
-
ESP32-C3 Wireless Adventure: A Comprehensive Guide to IoT [pdf]
ESP32s aren't really ‘lower level’ in the sense that anyone is likely to write assembly code for them (compared to, say, 8051 or PIC), other than maybe some driver author at Espressif. The big win from using RISC-V, other than name recognition, is mainstream compiler support (which is nothing to sneeze at, especially when it's largely funded by someone else).
When I worked on Matter¹, the Xtensa and RISC-V versions were basically fungible from the software point of view. (And really, so were other vendors' various ARMs.) We did find that Bloaty McBloatface² didn't support Xtensa, so I had to write an alternative.
¹ https://github.com/project-chip/connectedhomeip/
² https://github.com/google/bloaty
-
How to make smaller C and C++ binaries
I’ve gotten good insight into what takes up space in binaries by profiling with Bloaty (https://github.com/google/bloaty). My last profiling session showed that clang’s ThinLTO was inlining too aggressively in some cases, causing functions that should be tiny to be 75 kB+.
-
Reducing Tailscale’s binary size on macOS
I'm surprised they didn't go for the binary size analysis tools like
https://github.com/google/bloaty
Or goweight.
- C extension making everything bigger
- Template code bloat - how to measure, and what does that even mean?
-
Do you usually use periphery (or other code optimization tools) so that your final built release app is fast/ small?
I was able to shave a few % off our app binary with Bloaty. It’s pretty hard to use but once you figure out how to make regular expressions to properly classify things from your codebase, you can really visually analyze what your binary is composed of.
- how to compare two .so(shared lib) files for size
-
Debugging/optimizing/diagnostic tools for C++
Bloaty
- Bloaty McBloatface: a size profiler for binaries
- Bloaty McBloatface
What are some alternatives?
Protobuf - Protocol Buffers - Google's data interchange format
Clipboard - 😎🏖️🐬 Your new, 𝙧𝙞𝙙𝙤𝙣𝙠𝙪𝙡𝙞𝙘𝙞𝙤𝙪𝙨𝙡𝙮 smart clipboard manager
MessagePack for C# (.NET, .NET Core, Unity, Xamarin) - Extremely Fast MessagePack Serializer for C#(.NET, .NET Core, Unity, Xamarin). / msgpack.org[C#]
TinyGo - Go compiler for small places. Microcontrollers, WebAssembly (WASM/WASI), and command-line tools. Based on LLVM.
Json.NET - Json.NET is a popular high-performance JSON framework for .NET
protozero - Minimalist protocol buffer decoder and encoder in C++
ZeroFormatter - Infinitely Fast Deserializer for .NET, .NET Core and Unity.
capstone - Capstone disassembly/disassembler framework for ARM, ARM64 (ARMv8), BPF, Ethereum VM, M68K, M680X, Mips, MOS65XX, PPC, RISC-V(rv32G/rv64G), SH, Sparc, SystemZ, TMS320C64X, TriCore, Webassembly, XCore and X86.
Msgpack-Cli - MessagePack implementation for Common Language Infrastructure / msgpack.org[C#]
periphery - A tool to identify unused code in Swift projects.
Utf8Json - Definitely Fastest and Zero Allocation JSON Serializer for C#(NET, .NET Core, Unity, Xamarin).
espthernet - ESP8266 10-Base-T Ethernet Driver