[ https://issues.apache.org/jira/browse/LUCENENET-602?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16902523#comment-16902523 ]
Shad Storhaug commented on LUCENENET-602: ----------------------------------------- Interesting. We chose LurchTable because it was seemingly the only thread safe LRU cache for .NET in existence at the time. We copied and pasted the code because at the time NOBODY supported .NET Standard yet. I would be happy to use it, but there is a compatibility issue as it doesn't support .NET Framework 4.5 or .NET Standard 1.6. I'd rather not copy and paste it into our project again, but have the owners update their project to support more targets than just .NET Standard 2.0. Worst case, I guess we could target it for .NET Standard 2.0 and use LurchTable for .NET Framework/.NET Standard 1.x, but it would be nice not to have to add conditional compilation for this. Have you verified that all of the Facet tests pass with this LRU cache? > Error using Lucene.Net.Facet 4.8.0-beta00005 with Xamarin.iOS > -------------------------------------------------------------- > > Key: LUCENENET-602 > URL: https://issues.apache.org/jira/browse/LUCENENET-602 > Project: Lucene.Net > Issue Type: Bug > Components: Lucene.Net.Facet > Affects Versions: Lucene.Net 4.8.0 > Environment: Xamarin Forms 3.0.0.561731 > Ios 10.3.3 and Higher > Lucene.Net.Facet 4.8.0-beta00005 > Reporter: Enrico Caltran > Priority: Blocker > Labels: AOT, Xamarin.iOS, lucene.net.facet > Fix For: Lucene.Net 4.8.0 > > Attachments: AppTestLucene.zip > > Original Estimate: 120h > Remaining Estimate: 120h > > I'm using Lucene.Net.Facet 4.8.0-beta00005 in a big Xamarin project. > +With Xamarin.Android and Xamarin.UWP it's all right.+ > *+But With Xamarin.iOS on device (Ipad)+*, i'm receiving this error: > _Attempting to JIT compile method > 'Lucene.Net.Support.LurchTable2<Lucene.Net.Facet.Taxonomy.FacetLabel, > Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyReader/Int32Class>:InternalInsert<Lucene.Net.Support.LurchTable2/Add2Info<Lucene.Net.Facet.Taxonomy.FacetLabel, > Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyReader/Int32Class>> > (int,Lucene.Net.Facet.Taxonomy.FacetLabel,int&,Lucene.Net.Support.LurchTable`2/Add2Info<Lucene.Net.Facet.Taxonomy.FacetLabel, > Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyReader/Int32Class>&)' > while running in aot-only mode. See > [https://developer.xamarin.com/guides/ios/advanced_topics/limitations/] for > more information._ > _{color:#d04437}at Lucene.Net.Support.LurchTable2[TKey,TValue].Insert[T] > (TKey key, T& value) <0x2570f48 + 0x000e0> in > <063e095c95d945a4ace32ab83d1227eb#2ae0fea9ea4eacaef83bf2e9713bb8ea>:0 > at (wrapper unknown) System.Object.gsharedvt_in() at > Lucene.Net.Support.LurchTable2[TKey,TValue].AddOrUpdate (TKey key, TValue > addValue, Lucene.Net.Support.KeyValueUpdate2[TKey,TValue] fnUpdate) > <0x232824c + 0x0013b> in > <063e095c95d945a4ace32ab83d1227eb#2ae0fea9ea4eacaef83bf2e9713bb8ea>:0 > at Lucene.Net.Facet.Taxonomy.LRUHashMap2[TKey,TValue].Put (TKey key, TValue > value) <0x2c487f8 + 0x0015b> in > <79d3a7b905954d0993025c09c5d087ce#2ae0fea9ea4eacaef83bf2e9713bb8ea>:0 at > Lucene.Net.Facet.Taxonomy.Directory.DirectoryTaxonomyReader.GetOrdinal > (Lucene.Net.Facet.Taxonomy.FacetLabel cp) <0x2c51970 + 0x0019b> in > <79d3a7b905954d0993025c09c5d087ce#2ae0fea9ea4eacaef83bf2e9713bb8ea>:0 at > Lucene.Net.Facet.Taxonomy.Int32TaxonomyFacets.GetTopChildren{color} > (System.Int32 topN, System.String dim, System.String[] path) <0x2c481dc + > 0x0008f> in > <79d3a7b905954d0993025c09c5d087ce#2ae0fea9ea4eacaef83bf2e9713bb8ea>:0 at > Login.MyMB.Lucene.Client.LuceneArticoliSearcher.GetListaArticoloXRicercaAvanzataConRicercaSemplice > (System.Collections.Generic.List1[T] listParametri) <0x224add0 + > 0x001bb> in > <8f49891e0f0546e185aba7424d294ef7#2ae0fea9ea4eacaef83bf2e9713bb8ea>:0 > at > Login.MyMB.Lucene.Client.LuceneArticoliSearcher.GetListaArticoloConRicercaSemplice > (System.Collections.Generic.List1[T] listParametri) <0x224afbc + 0x0009f> in > <8f49891e0f0546e185aba7424d294ef7#2ae0fea9ea4eacaef83bf2e9713bb8ea>:0 at > MyMB.Forms.RicercaLucene.RicercaArticoloLucene.GetListaArticoliXRicercaSemplice > (Login.MyMB.Interface.IAmbiente ambiente, > Login.MyMB.Lucene.Client.LuceneArticoliSearcher las, > System.Collections.Generic.List`1[T] ListParametri, System.Boolean > isAbilitataRicercaBarcode) <0xe47fc0 + 0x000e7> in > <f1bb3149abe145459612794f1a096634#2ae0fea9ea4eacaef83bf2e9713bb8ea>:0 > ..............................._ > At the link > [https://docs.microsoft.com/it-it/xamarin/ios/internals/limitations] , I > found the problem cause (I suppose...): > _Value types as Dictionary Keys Using a value type as a Dictionary<TKey, > TValue> key is problematic, as the default Dictionary constructor attempts to > use EqualityComparer<TKey>.Default. EqualityComparer<TKey>.Default, in turn, > attempts to use Reflection to instantiate a new type which implements the > IEqualityComparer<TKey> interface. This works for reference types (as the > reflection+create a new type step is skipped), but for value types it crashes > and burns rather quickly once you attempt to use it on the device. > Workaround: Manually implement the IEqualityComparer<TKey> interface in a new > type and provide an instance of that type to the Dictionary<TKey, TValue> > (IEqualityComparer<TKey>) constructor._ > So, what can I do? Thank you in advance, Enrico Caltran +393357485560 > [enrico.calt...@timegroup.it|mailto:enrico.calt...@timegroup.it] -- This message was sent by Atlassian JIRA (v7.6.14#76016)