C# 如何在dll中嵌入只读表

C# 如何在dll中嵌入只读表,c#,dll,embed,C#,Dll,Embed,我的dll文件需要一些代码页转换映射。有些字符串需要逐字符转换。目前,我创建了几个保存这些地图的大型词典。这些字典太大了,我不得不把它们分成8个字典,否则C#不允许我编译。现在,加载应用程序需要几秒钟的时间,并且占用了太多内存 我希望这能更有效一点。也许我可以在我的dll中嵌入一个(或多个)表,然后用sql或linq之类的工具查询它。现在我知道dll不是用来存储数据的,但是我的客户会喜欢一个.dll文件。该表只需要是只读的,并容纳约62000行 其他信息: 我有10个代码页,我需要转换为unic

我的dll文件需要一些代码页转换映射。有些字符串需要逐字符转换。目前,我创建了几个保存这些地图的大型词典。这些字典太大了,我不得不把它们分成8个字典,否则C#不允许我编译。现在,加载应用程序需要几秒钟的时间,并且占用了太多内存

我希望这能更有效一点。也许我可以在我的dll中嵌入一个(或多个)表,然后用sql或linq之类的工具查询它。现在我知道dll不是用来存储数据的,但是我的客户会喜欢一个.dll文件。该表只需要是只读的,并容纳约62000行

其他信息:

我有10个代码页,我需要转换为unicode和返回

这些代码页中有6个是单字节代码页,没有什么大不了的。(6*256*2=3072项)

其中4个是双字节代码页,即CP932、CP950、CP936和CP949,用于制作~62000*2=124000个项目

我可以省略任何字符集的前128个字符,但这没有多大意义

如果我能将其保存在一个可查询的东西中,我只需要保存~62000+1536条记录,并使用它们进行双向转换

在当前的字典中查找字符相当快。内存的使用并不重要,启动时间最让我困扰

查找速度必须很快,最坏的情况是我必须每秒转换20个句子。拖延是不可取的,它必须跟上


有可能吗?实现这一点的最佳方法是什么?

在编译应用程序时,您可以使用资源文件存储数据。应用程序将构建在单个dll中

将表嵌入资源文件无助于内存消耗,因为当访问程序集时,它必须被加载到内存中——虽然并不总是加载整个文件,但是一旦您访问资源,它就会被加载


我想到的最佳解决方案是一个Sqlite或Sql Server压缩文件,它与DLL一起发送给客户,并包含数据。查询本地DB文件会减少你的内存消耗。

< P>我希望我不会误解你的需求,但也许你应该考虑使用大数组而不是字典。假设您只需要处理16位unicode代码点(代理项对会影响所有内容),只需创建一个65536字符表即可

如果要从一个字符映射到一个字符,这样的表需要128K,如果需要映射到其他信息,则需要更多。但是,您不会为内部字典数据结构支付开销,您可以声明声明数组:

私有字符[]mymap=新字符[65536] { …//65536件事 }

我相信这应该比将大量数据加载到字典中要快得多


同样,如果这不能满足您的需要,请提供有关当前转换方式的更多上下文,我很乐意编辑或删除。

有趣的问题:将大量数据嵌入程序集的最佳方式是什么?可能在编译时嵌入一个资源文件?谢谢你的回复。我还没有试过基本数组。我在第一篇文章中提供了更多的信息。