Skip to content

Commit

Permalink
Update v2_roadmap.md
Browse files Browse the repository at this point in the history
  • Loading branch information
leculver authored Dec 9, 2019
1 parent 2afd6ee commit a56deb7
Showing 1 changed file with 26 additions and 13 deletions.
39 changes: 26 additions & 13 deletions doc/v2_roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,22 @@ Generics support is just broken and terrible and has been forever. I am conside
I really hope to find a better solution for testing the product. Since we require a crash dump/core dump to debug it's very difficult to have a sane checked-in test environment.


# Changes from ClrMD 1.1

Added features:

1. **Memory Usage** - ClrMD has reduced its overall memory usage. It also allows you to finely control what ClrMD caches to allow the user to trade performance for lower overall memory usage. Finally, we also allow you to completely clear all cached memory in ClrMD at any time to prevent OOM. This even works while in the middle of enumerating the heap.
2. **Thread Safety** - If ClrRuntime.IsThreadSafe returns true then you are allowed to call all functions from multiple threads. Please note that you likely will not see much performance improvements by running algorithms in parallel. The CLR debugging layer, mscordaccore.dll, takes a giant lock around most operations which means we do not get easy performance gains.
3. **Nullable Reference Types** - ClrMD fully implements nullable reference types so you will know exactly what you need to null check from the library.
4. **Architectural Overhaul** - ClrMD is now much less internally coupled. Most implementation types are now public, allowing you to use those types directly or to use the I\*Builder interfaces to "mock" objects.

Removed:

1. **Removed Blocking Object** code - This was buggy in its initial implementation and never worked right. We do not intend to support this or rebuild it in 2.0.
2. **GCRoot moved** - Moved GCRoot to a new Utilities library. It will be fully supported and on GitHub but not part of the default implementation of ClrMD.
3. **SymbolLocator partially removed** - ClrMD still supports communicating with a symbol server to locate binaries but it's no longer intended to be a general purpose symbol server client.
4. **CLR v2 and v4 (prior to 4.5) support removed** - ClrMD now only supports Desktop .Net 4.5+ and all .Net Core versions.

# Features slated for removal

1. Blocking Objects - will be either reference code or in a separate library.
Expand All @@ -75,7 +91,7 @@ Here is a list of feedback I am tracking from the community (my summary):

1. It is difficult to build unit tests for code which uses ClrMD because it requires hydrating an entire object tree. It would be nice if the library was mock-able. - **Completed (somewhat)** - *Did not add interfaces for every type, but made it easier to construct your own Clr* objects.*
2. Consider enabling nullable reference types. - **Completed**
3. Have a mode where I can indicate what is most important to me speed or memory usage. - **Approved** - *I plan to have a way to limit the amount ClrMD allocates at the cost of performance.*
3. Have a mode where I can indicate what is most important to me speed or memory usage. - **Completed** - *I plan to have a way to limit the amount ClrMD allocates at the cost of performance.*
4. Consider using native memory where it makes sense (basically limit small allocations and other memory thrashing. **Completed** - *The library has moved to using Span with stackalloc/ArrayPool.Rent in the vast majority of allocation cases. I've also removed the usage of most marshalled arrays in PInvoke signatures, preferring instead to pass pointers to byte arrays.*
5. Clean up the design of a lot of weird parts of the library. - **Approved** - *That is the goal of ClrMD 2.0.*
6. Improve the messages and exceptions thrown by the library. - **Tentatively Planned**
Expand All @@ -85,18 +101,15 @@ Here is a list of feedback I am tracking from the community (my summary):

(Notes to myself about what I need to revisit.)

1. SymbolLocator related code.
2. Offsets for string and exception fields when we have no metadata.
3. Document all functions
4. consider reworking ClrField.GetValue
5. Enum related code in ClrType
6. clean up exception usage
7. Add more tests now that we can easily mock up objects.
8. All caching and parallel support was stripped out of GCRoot. Need to add it back.
9. SafeWin32Handle -> SafeAccessTokenHandle
10. Consider removing GetFieldForOffset
11. Consider enumerating offset in ClrObject.EnumerateReferences.
12. Add back our debugger so we don't have to use a local csc.
1. Offsets for string and exception fields when we have no metadata.
2. Document all functions
3. consider reworking ClrField.GetValue
4. Enum related code in ClrType
5. clean up exception usage
6. Add more tests now that we can easily mock up objects.
7. All caching and parallel support was stripped out of GCRoot. Need to add it back.
8. Consider enumerating offset in ClrObject.EnumerateReferences.
9. Add back our debugger so we don't have to use a local csc.

# .Net Core 5 Dac Wishlist

Expand Down

0 comments on commit a56deb7

Please sign in to comment.