<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Wed Feb 07 21:42:35 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>MongoDB Jira</title>
    <link>https://jira.mongodb.org</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>9.7.1</version>
        <build-number>970001</build-number>
        <build-date>13-04-2023</build-date>
    </build-info>


<item>
            <title>[CSHARP-2450] Performance: Reduced lock contention in BsonSerializer.LookupActualType</title>
                <link>https://jira.mongodb.org/browse/CSHARP-2450</link>
                <project id="10041" key="CSHARP">C# Driver</project>
                    <description>&lt;p&gt;Performance profiling in our multithreaded environment seems to indicate that BsonSerializer.LookupActualType is on the hot path during deserialization. This is caused by the current reader-writer lock implementation. There is, however, an opportunity to reduce lock contention using a non-generic Hashtable which is safe for concurrent reads as per &lt;a href=&quot;https://docs.microsoft.com/en-us/dotnet/api/system.collections.hashtable?redirectedfrom=MSDN&amp;amp;view=netframework-4.7.2#thread-safety&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://docs.microsoft.com/en-us/dotnet/api/system.collections.hashtable?redirectedfrom=MSDN&amp;amp;view=netframework-4.7.2#thread-safety&lt;/a&gt;.&lt;/p&gt;</description>
                <environment></environment>
        <key id="649406">CSHARP-2450</key>
            <summary>Performance: Reduced lock contention in BsonSerializer.LookupActualType</summary>
                <type id="4" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14710&amp;avatarType=issuetype">Improvement</type>
                                            <priority id="3" iconUrl="https://jira.mongodb.org/images/icons/priorities/major.svg">Major - P3</priority>
                        <status id="6" iconUrl="https://jira.mongodb.org/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="13201">Fixed</resolution>
                                        <assignee username="james.kovacs@mongodb.com">James Kovacs</assignee>
                                    <reporter username="daniel.hegener@gmx.net">Daniel Hegener</reporter>
                        <labels>
                    </labels>
                <created>Tue, 11 Dec 2018 07:02:54 +0000</created>
                <updated>Sat, 28 Oct 2023 11:48:52 +0000</updated>
                            <resolved>Tue, 30 Mar 2021 19:48:54 +0000</resolved>
                                    <version>2.7.2</version>
                                    <fixVersion>2.12.2</fixVersion>
                    <fixVersion>2.13.0</fixVersion>
                                    <component>Performance</component>
                    <component>Serialization</component>
                                        <votes>0</votes>
                                    <watches>4</watches>
                                                                                                                <comments>
                            <comment id="3692286" author="xgen-internal-githook" created="Tue, 30 Mar 2021 19:48:48 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{&apos;name&apos;: &apos;James Kovacs&apos;, &apos;email&apos;: &apos;jkovacs@post.harvard.edu&apos;, &apos;username&apos;: &apos;JamesKovacs&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/CSHARP-2450&quot; title=&quot;Performance: Reduced lock contention in BsonSerializer.LookupActualType&quot; class=&quot;issue-link&quot; data-issue-key=&quot;CSHARP-2450&quot;&gt;&lt;del&gt;CSHARP-2450&lt;/del&gt;&lt;/a&gt;: Improved deserialization performance by switching from HashSet&amp;lt;T&amp;gt; protected by a ReaderWriterLockSlim to a ConcurrentDictionary&amp;lt;K,V&amp;gt; outside the ReaderWriterLockSlim. (#482)&lt;br/&gt;
Branch: v2.12.x&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo-csharp-driver/commit/ec2dfa98879c4da332c48047575632459751b135&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo-csharp-driver/commit/ec2dfa98879c4da332c48047575632459751b135&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="3692272" author="james.kovacs" created="Tue, 30 Mar 2021 19:43:23 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=dnickless&quot; class=&quot;user-hover&quot; rel=&quot;dnickless&quot;&gt;dnickless&lt;/a&gt; On second thought... I&apos;ve closed this case so we can track fix version as part of our release process. I&apos;ve forked a new ticket &lt;a href=&quot;https://jira.mongodb.org/browse/CSHARP-3513&quot; title=&quot;Investigate performance improvements in LookupActualType&quot; class=&quot;issue-link&quot; data-issue-key=&quot;CSHARP-3513&quot;&gt;CSHARP-3513&lt;/a&gt; to continue work on &lt;tt&gt;LookupActualType&lt;/tt&gt; improvements in &lt;a href=&quot;https://github.com/mongodb/mongo-csharp-driver/pull/434&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;PR #434&lt;/a&gt;.&lt;/p&gt;</comment>
                            <comment id="3689469" author="james.kovacs" created="Mon, 29 Mar 2021 18:01:23 +0000"  >&lt;p&gt;&lt;a href=&quot;https://github.com/mongodb/mongo-csharp-driver/pull/482&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;PR #482&lt;/a&gt; has been incorporated into &lt;tt&gt;master&lt;/tt&gt; (see above). We will leave this ticket open as &lt;a href=&quot;https://github.com/mongodb/mongo-csharp-driver/pull/434&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;PR #434&lt;/a&gt; is rebased and performance re-evaluated in light of the PR #482 changes.&lt;/p&gt;</comment>
                            <comment id="3689340" author="xgen-internal-githook" created="Mon, 29 Mar 2021 17:25:04 +0000"  >&lt;p&gt;Author:&lt;/p&gt;
{&apos;name&apos;: &apos;James Kovacs&apos;, &apos;email&apos;: &apos;jkovacs@post.harvard.edu&apos;, &apos;username&apos;: &apos;JamesKovacs&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/CSHARP-2450&quot; title=&quot;Performance: Reduced lock contention in BsonSerializer.LookupActualType&quot; class=&quot;issue-link&quot; data-issue-key=&quot;CSHARP-2450&quot;&gt;&lt;del&gt;CSHARP-2450&lt;/del&gt;&lt;/a&gt;: Improved deserialization performance by switching from HashSet&amp;lt;T&amp;gt; protected by a ReaderWriterLockSlim to a ConcurrentDictionary&amp;lt;K,V&amp;gt; outside the ReaderWriterLockSlim. (#482)&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo-csharp-driver/commit/2d021c58e972860bd1d781c2694af55ceb8552f9&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo-csharp-driver/commit/2d021c58e972860bd1d781c2694af55ceb8552f9&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="3551025" author="JIRAUSER1256534" created="Wed, 6 Jan 2021 18:14:00 +0000"  >&lt;p&gt;I also created &lt;a href=&quot;https://github.com/mongodb/mongo-csharp-driver/pull/434&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo-csharp-driver/pull/434&lt;/a&gt;&#160;which tackles another performance bottleneck that sits in the same area of the code (LookupActualType) but also impacts serialization.&lt;/p&gt;</comment>
                            <comment id="3550895" author="JIRAUSER1256534" created="Wed, 6 Jan 2021 17:24:07 +0000"  >&lt;p&gt;Thanks, @boris.dogadov, I understand your concerns and also that this is a risky area of the code. However, kindly note that the&lt;/p&gt;
&lt;p/&gt;
&lt;div id=&quot;syntaxplugin&quot; class=&quot;syntaxplugin&quot; style=&quot;border: 1px dashed #bbb; border-radius: 5px !important; overflow: auto; max-height: 30em;&quot;&gt;
&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; width=&quot;100%&quot; style=&quot;font-size: 1em; line-height: 1.4em !important; font-weight: normal; font-style: normal; color: black;&quot;&gt;
		&lt;tbody &gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;  margin-top: 10px;   margin-bottom: 10px;  width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;IsTypeDiscriminated(Type type)&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
			&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p/&gt;
&lt;p&gt;method currently does not synchronize access to the &amp;#95;&amp;#95;discriminatedTypes field. And this is the only place where that field gets read... So, really, either there already is a potential race condition in the current code or the fact that both fields (&amp;#95;&amp;#95;discriminatedTypes and &amp;#95;&amp;#95;discriminators) are changed inside the same lock is more of a coincidence than evidence for a dependency between the two.&lt;/p&gt;

&lt;p&gt;Anyway, since this topic really is a big deal for us, I gave it a second shot: &lt;a href=&quot;https://github.com/mongodb/mongo-csharp-driver/pull/433&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo-csharp-driver/pull/433&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This time, I didn&apos;t totally eliminate read locks in LookupActualType but at least shortened the locked section to a bare minimum. I haven&apos;t changed a lot really just made sure that the HashSet&amp;lt;Type&amp;gt; collections inside the &amp;#95;&amp;#95;discriminators dictionary are kind of immutable.&lt;/p&gt;

&lt;p&gt;Also, I have added the probably missing read lock inside the above-mentioned IsTypeDiscriminated method.&lt;/p&gt;</comment>
                            <comment id="3543283" author="JIRAUSER1257742" created="Mon, 28 Dec 2020 23:55:58 +0000"  >&lt;p&gt;Hi &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=daniel.hegener%40gmx.net&quot; class=&quot;user-hover&quot; rel=&quot;daniel.hegener@gmx.net&quot;&gt;daniel.hegener@gmx.net&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Currently there is a global assumption that all serialization configuration is protected by single synchronization primitive. Making any path lock-free would require careful inspection of all possible interleavings of read/writes of other configurations parts.&lt;/p&gt;

&lt;p&gt;One of the examples would be: __discriminatedTypes and __discriminators are expected to be always in a consistent state with each other (modified under the same lock). Making LookupActualType look-free, might result in an inconsistent observed state where __discriminators is updated and __discriminatedTypes still not.&lt;/p&gt;</comment>
                            <comment id="3537183" author="JIRAUSER1256534" created="Sat, 19 Dec 2020 01:58:36 +0000"  >&lt;p&gt;Would you mind elaborating a bit more on your findings, please? Based on my profiling back then (screenshot in the PR) and the benchmark I put on gist which yielded the results described in my other comment above, the improvements appeared rather striking and absolutely worth that change which - IIRC after all the years - was a small and safe thing, just not super pretty because of the moon-generic hashset... I&apos;m happy to try harder again if you tell me what&apos;s not yet good in the suggested implementation.&lt;br/&gt;
We use your driver&apos;s serialization facilities in isolation, too (kind of like a JSON library rather than like a pure driver), so not only in conjunction with writing to the database but also e.g. when serializing in-memory instances out to ReST clients. All of that happens in heavily parallel scenarios which is why this is so important for us.&lt;/p&gt;</comment>
                            <comment id="3536764" author="JIRAUSER1257742" created="Fri, 18 Dec 2020 20:28:46 +0000"  >&lt;p&gt;Hi &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=dnickless&quot; class=&quot;user-hover&quot; rel=&quot;dnickless&quot;&gt;dnickless&lt;/a&gt;, thanks for bringing up this issue and submitting the PR.&lt;br/&gt;
We have investigated the proposed change and other alternatives. We have found that the required change cannot be limited to BsonSerializer.LookupActualType only, and requires refactoring of the whole synchronization approach at both BsonSerializer and BsonClassMap. After benchmarking a version of BsonSerializer and BsonClassMap with lock-free reads, we have decided that the performance gain does not justify the overall refactoring and potential consequences.&lt;/p&gt;</comment>
                            <comment id="2159187" author="JIRAUSER1256534" created="Thu, 21 Feb 2019 22:40:29 +0000"  >&lt;p&gt;Hi Ian&lt;/p&gt;

&lt;p&gt;I am sorry for not getting back any earlier but I&apos;ve been pretty darn busy recently. Anyway, I have interesting news:&lt;/p&gt;

&lt;p&gt;I borrowed some fairly realistic test classes from &lt;a href=&quot;https://csharp2json.io/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://csharp2json.io/&lt;/a&gt;. Using those, I hacked together the following &quot;unit test&quot;: &lt;a href=&quot;https://gist.github.com/dnickless/334cff0490e788759918c341f78563fa&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://gist.github.com/dnickless/334cff0490e788759918c341f78563fa&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It&apos;s really not sophisticated in any way but it certainly does some multithreaded deserialization of 10m documents.&lt;/p&gt;

&lt;p&gt;On my workstation (2 sockets x 6 cores x Hyperthreading = 24 Cores), I see the following results:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;BEFORE&lt;/b&gt;:&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:15:46 Informational&amp;#93;&lt;/span&gt; ------ Run test started ------&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:15:46 Informational&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;xUnit.net 00:00:00.00&amp;#93;&lt;/span&gt; xUnit.net VSTest Adapter v2.4.0 (32-bit Desktop .NET 4.0.30319.42000)&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:15:47 Informational&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;xUnit.net 00:00:00.96&amp;#93;&lt;/span&gt; Starting: MongoDB.Bson.Tests&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:16:38 Informational&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;xUnit.net 00:00:52.21&amp;#93;&lt;/span&gt; Finished: MongoDB.Bson.Tests&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:16:38 Informational&amp;#93;&lt;/span&gt; ========== Run test finished: 1 run (0:00:&lt;b&gt;52.695014&lt;/b&gt;) ==========&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:16:45 Informational&amp;#93;&lt;/span&gt; ------ Run test started ------&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:16:45 Informational&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;xUnit.net 00:00:00.00&amp;#93;&lt;/span&gt; xUnit.net VSTest Adapter v2.4.0 (32-bit Desktop .NET 4.0.30319.42000)&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:16:46 Informational&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;xUnit.net 00:00:01.04&amp;#93;&lt;/span&gt; Starting: MongoDB.Bson.Tests&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:17:35 Informational&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;xUnit.net 00:00:49.87&amp;#93;&lt;/span&gt; Finished: MongoDB.Bson.Tests&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:17:35 Informational&amp;#93;&lt;/span&gt; ========== Run test finished: 1 run (0:00:&lt;b&gt;50.3388792&lt;/b&gt;) ==========&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:17:42 Informational&amp;#93;&lt;/span&gt; ------ Run test started ------&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:17:42 Informational&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;xUnit.net 00:00:00.00&amp;#93;&lt;/span&gt; xUnit.net VSTest Adapter v2.4.0 (32-bit Desktop .NET 4.0.30319.42000)&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:17:43 Informational&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;xUnit.net 00:00:00.91&amp;#93;&lt;/span&gt; Starting: MongoDB.Bson.Tests&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:18:35 Informational&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;xUnit.net 00:00:52.72&amp;#93;&lt;/span&gt; Finished: MongoDB.Bson.Tests&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:18:35 Informational&amp;#93;&lt;/span&gt; ========== Run test finished: 1 run (0:00:&lt;b&gt;53.2820475&lt;/b&gt;) ==========&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;image-wrap&quot; style=&quot;&quot;&gt;&lt;img src=&quot;https://jira.mongodb.org/secure/attachment/209731/209731_image-2019-02-21-17-39-35-659.png&quot; style=&quot;border: 0px solid black&quot; /&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;AFTER&lt;/b&gt;:&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:31:24 Informational&amp;#93;&lt;/span&gt; ------ Run test started ------&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:31:24 Informational&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;xUnit.net 00:00:00.00&amp;#93;&lt;/span&gt; xUnit.net VSTest Adapter v2.4.0 (32-bit Desktop .NET 4.0.30319.42000)&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:31:25 Informational&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;xUnit.net 00:00:00.98&amp;#93;&lt;/span&gt; Starting: MongoDB.Bson.Tests&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:31:55 Informational&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;xUnit.net 00:00:31.15&amp;#93;&lt;/span&gt; Finished: MongoDB.Bson.Tests&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:31:55 Informational&amp;#93;&lt;/span&gt; ========== Run test finished: 1 run (0:00:&lt;b&gt;31.6398097&lt;/b&gt;) ==========&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:32:03 Informational&amp;#93;&lt;/span&gt; ------ Run test started ------&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:32:03 Informational&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;xUnit.net 00:00:00.00&amp;#93;&lt;/span&gt; xUnit.net VSTest Adapter v2.4.0 (32-bit Desktop .NET 4.0.30319.42000)&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:32:04 Informational&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;xUnit.net 00:00:00.91&amp;#93;&lt;/span&gt; Starting: MongoDB.Bson.Tests&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:32:35 Informational&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;xUnit.net 00:00:31.76&amp;#93;&lt;/span&gt; Finished: MongoDB.Bson.Tests&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:32:35 Informational&amp;#93;&lt;/span&gt; ========== Run test finished: 1 run (0:00:&lt;b&gt;32.2108424&lt;/b&gt;) ==========&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:32:46 Informational&amp;#93;&lt;/span&gt; ------ Run test started ------&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:32:47 Informational&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;xUnit.net 00:00:00.00&amp;#93;&lt;/span&gt; xUnit.net VSTest Adapter v2.4.0 (32-bit Desktop .NET 4.0.30319.42000)&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:32:48 Informational&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;xUnit.net 00:00:00.98&amp;#93;&lt;/span&gt; Starting: MongoDB.Bson.Tests&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:33:18 Informational&amp;#93;&lt;/span&gt; &lt;span class=&quot;error&quot;&gt;&amp;#91;xUnit.net 00:00:31.35&amp;#93;&lt;/span&gt; Finished: MongoDB.Bson.Tests&lt;br/&gt;
 &lt;span class=&quot;error&quot;&gt;&amp;#91;02/21/2019 17:33:18 Informational&amp;#93;&lt;/span&gt; ========== Run test finished: 1 run (0:00:&lt;b&gt;31.7638168&lt;/b&gt;) ==========&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;image-wrap&quot; style=&quot;&quot;&gt;&lt;img src=&quot;https://jira.mongodb.org/secure/attachment/209734/209734_image-2019-02-21-17-41-20-757.png&quot; style=&quot;border: 0px solid black&quot; /&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;I haven&apos;t tried using less cores or no HT or anything around .NET Core or other bitness etc... Nonetheless,&#160;assuming I made no mistake in continuing to guarantee thread-safe writes, this would appear to be a massive improvement.&lt;/p&gt;</comment>
                            <comment id="2093413" author="ian@10gen.com" created="Mon, 17 Dec 2018 20:32:51 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=dnickless&quot; class=&quot;user-hover&quot; rel=&quot;dnickless&quot;&gt;dnickless&lt;/a&gt; what improvements are you seeing in your PR in both the profiler and actual throughput?&lt;/p&gt;</comment>
                            <comment id="2093402" author="ian@10gen.com" created="Mon, 17 Dec 2018 20:28:17 +0000"  >&lt;p&gt;&lt;a href=&quot;https://github.com/mongodb/mongo-csharp-driver/pull/347&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo-csharp-driver/pull/347&lt;/a&gt;&lt;/p&gt;</comment>
                    </comments>
                    <attachments>
                            <attachment id="209731" name="image-2019-02-21-17-39-35-659.png" size="11371" author="dnickless" created="Thu, 21 Feb 2019 22:39:44 +0000"/>
                            <attachment id="209734" name="image-2019-02-21-17-41-20-757.png" size="11386" author="dnickless" created="Thu, 21 Feb 2019 22:41:29 +0000"/>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_15850" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|hu5m7z:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10558" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9223372036854775807</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            </customfields>
    </item>
</channel>
</rss>