Skip to content

Commit 3365be0

Browse files
committed
Update README.md
1 parent 3a4ae2b commit 3365be0

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

README.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@
1010
[![Infidex](https://shields.io/nuget/v/FastCloner.SourceGenerator?v=304&icon=nuget&label=FastCloner.SourceGenerator)](https://www.nuget.org/packages/FastCloner.SourceGenerator)
1111
[![License:MIT](https://img.shields.io/badge/License-MIT-34D058.svg)](https://opensource.org/license/mit)
1212

13-
The fastest deep cloning library, supporting anything from <code>.NET 4.6</code> to modern <code>.NET 10+</code> with no dependencies. FastCloner uses a unique source generator capable of analyzing object graphs and cloning object without explicit annotations. For types that cannot be cloned, such as <code>HttpClient</code>, FastCloner uses a highly optimized reflection-based fallback. Zero dependencies, blazingly fast, built for developers who need cloning that _just works_.
13+
The fastest deep cloning library, supporting anything from <code>.NET 4.6</code> to modern <code>.NET 10+</code> with no dependencies. FastCloner uses a unique source generator capable of analyzing object graphs and cloning objects without explicit annotations. For types that cannot be cloned, such as <code>HttpClient</code>, FastCloner uses a highly optimized reflection-based fallback. Zero dependencies, blazingly fast, built for developers who need cloning that _just works_.
1414

1515
</div>
1616

1717
## ✨ Features
1818

19-
- **The Fastest** - Benchmarked to beat all other libraries with third-party independent benchmarks verifing the speed
19+
- **The Fastest** - Benchmarked to beat all other libraries with third-party independent benchmarks verifying the speed
2020
- **The Most Correct** - Cloning objects is hard: `<T>`, `abstract`, immutables, read-only, pointers, circular dependencies, deeply nested graphs.. we have over [500 tests](https://github.com/lofcz/FastCloner/tree/next/FastCloner.Tests) verifying correct behavior in these cases and we are transparent about the [limitations](https://github.com/lofcz/FastCloner?tab=readme-ov-file#limitations)
21-
- **Novel Algorithm** - FastCloner recognizes that certain that cloning code cannot be generated in certain scenarios and uses highly optimized reflection based approach instead for these types - this only happens for the members that need this, not entire objects
21+
- **Novel Algorithm** - FastCloner recognizes that certain cloning code cannot be generated in certain scenarios and uses highly optimized reflection-based approach instead for these types - this only happens for the members that need this, not entire objects
2222
- **Embeddable** - FastCloner has no dependencies outside the standard library. Source generator and reflection parts can be installed independently
2323
- **Gentle & Caring** - FastCloner detects standard attributes like `[NonSerialized]` making it easy to try without polluting codebase with custom attributes. Type usage graph for generics is built automatically producing performant cloning code without manual annotations
2424
- **Easy Integration** - `FastDeepClone()` for AOT cloning, `DeepClone()` for reflection cloning. That's it!
@@ -63,7 +63,7 @@ public class MyClass
6363
public string StrVal { get; set; }
6464
}
6565

66-
// only classes where FastDeepClone() extension method should be generated
66+
// Only classes where FastDeepClone() extension method should be generated
6767
// need to use [FastClonerClonable]!
6868
var original = new GenericClass<List<MyClass>> { Value = new List<MyClass> { new MyClass { StrVal = "hello world" } } };
6969
var clone = original.FastDeepClone();
@@ -84,7 +84,7 @@ TestPropsWithIgnored original = new TestPropsWithIgnored { A = 42, B = "Test val
8484
TestPropsWithIgnored clone = original.DeepClone(); // clone.B is null (default value of a given type)
8585
```
8686

87-
You might also need to exclude certain types from being cloned ever. To do that, put offending types on a blacklist:
87+
You might also need to exclude certain types from ever being cloned. To do that, put offending types on a blacklist:
8888
```cs
8989
FastCloner.FastCloner.IgnoreType(typeof(PropertyChangedEventHandler)); // or FastCloner.FastCloner.IgnoreTypes([ .. ])
9090
```
@@ -106,7 +106,7 @@ FastCloner.FastCloner.ClearCache();
106106

107107
- Cloning unmanaged resources, such as `IntPtr`s may result in side-effects, as there is no metadata for the length of buffers such pointers often point to.
108108
- `ReadOnly` and `Immutable` collections are tested to behave well if they follow basic conventions.
109-
- With reflection, cloning deeply nested objects switches from recursion to iterative approach on-fly. The threshold for this can be configured by changing `FastCloner.MaxRecursionDepth`, iterative approach is marginally slower.
109+
- With reflection, cloning deeply nested objects switches from recursion to iterative approach on the fly. The threshold for this can be configured by changing `FastCloner.MaxRecursionDepth`, iterative approach is marginally slower.
110110

111111
## Performance
112112

@@ -134,7 +134,7 @@ Intel Core i7-8700 CPU 3.20GHz (Max: 3.19GHz) (Coffee Lake), 1 CPU, 12 logical a
134134
| AnyCloneBenchmark | 5,102.40 ns | 239.089 ns | 704.959 ns | 5,370.93 ns | 497.81 | 68.98 | 13 | 0.9003 | - | 5656 B | 78.56 |
135135
```
136136

137-
You can run the benchmark [locally](https://github.com/lofcz/FastCloner/blob/next/FastCloner.Benchmark/BenchMinimal.cs) to verify the results. There are also [third-party benchmarks](https://github.com/AnderssonPeter/Dolly?tab=readme-ov-file#benchmarks) in some of competing libraries confirming these results.
137+
You can run the benchmark [locally](https://github.com/lofcz/FastCloner/blob/next/FastCloner.Benchmark/BenchMinimal.cs) to verify the results. There are also [third-party benchmarks](https://github.com/AnderssonPeter/Dolly?tab=readme-ov-file#benchmarks) in some of the competing libraries confirming these results.
138138

139139
## Contributing
140140

0 commit comments

Comments
 (0)