[ https://issues.apache.org/jira/browse/LUCENENET-495?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13393629#comment-13393629 ]
Itamar Syn-Hershko commented on LUCENENET-495: ---------------------------------------------- 1. IMO, if there is a thread safety bug, it needs to be fixed 2. Why do we have AddIfNotContains(Hashtable, object), and we are not using ConcurrentDictionary? > Use of DateTime.Now causes huge amount of System.Globalization.DaylightTime > object allocations > ---------------------------------------------------------------------------------------------- > > Key: LUCENENET-495 > URL: https://issues.apache.org/jira/browse/LUCENENET-495 > Project: Lucene.Net > Issue Type: Bug > Components: Lucene.Net Core > Affects Versions: Lucene.Net 2.9.4, Lucene.Net 3.0.3 > Reporter: Christopher Currens > Assignee: Christopher Currens > Priority: Critical > Fix For: Lucene.Net 3.0.3 > > > This issue mostly just affects RAMDirectory. However, RAMFile and > RAMOutputStream are used in other (all?) directory implementations, including > FSDirectory types. > In RAMOutputStream, the file last modified property for the RAMFile is > updated when the stream is flushed. It's calculated using > {{DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond}}. I've read before that > Microsoft has regretted making DateTime.Now a property instead of a method, > and after seeing what it's doing, I'm starting to understand why. > DateTime.Now is returning local time. In order for it to calculate that, it > has to get the utf offset for the machine, which requires the creation of a > _class_, System.Globalization.DaylightTime. This is bad for performance. > Using code to write 10,000 small documents to an index (4kb sizes), it > created 1,570,157 of these DaylightTime classes, a total of 62MB of extra > memory...clearly RAMOutputStream.Flush() is called a lot. > A fix I'd like to propose is to change the RAMFile from storing the > LastModified date to UTC instead of local. DateTime.UtcNow doesn't create > any additional objects and is very fast. For this small benchmark, the > performance increase is 31%. > I've set it to convert to local-time, when {{RAMDirectory.LastModified(string > name)}} is called to make sure it has the same behavior (tests fail > otherwise). Are there any other side-effects to making this change? -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira