我在Common.DLL中有一个静态DataTable(带有80k记录),而Common.DLL由10个Windows服务引用。因此,我不需要在内存中拥有10个DataTable副本,而是需要将其作为1个副本并将所有服务指向该数据源。这种方法可行吗?
答案 0 :(得分:5)
鉴于服务至少会使用不同的AppDomain,很可能是不同的进程,在所有这些服务之间共享相同的数据会很棘手。
我个人建议你不要担心 - 除非每条记录实际上都很大,否则80K的记录仍然相当小。
可能可能拥有第11个服务,其中仅拥有数据,然后与其他服务通信。但是,这引入了很多复杂性而收效甚微。
可能节省内存的一种方法是使用List<T>
作为自定义类型,而不是DataTable
- 可能效率更高,而且几乎可以肯定在内部使用代码。如果你真的需要 DataTable
无论你用它做什么都没有帮助,但我个人试图避免这样做......
答案 1 :(得分:0)
您可以创建一个本地托管的WCF service,并将80k记录读入内存。
然后,您将在WCF服务上定义一个API,该API包含适用于您的10个Windows服务需要进行的任何调用的方法。
这样做会增加您的解决方案的复杂程度,但这可能是不需要的。
答案 2 :(得分:-1)
使用Singleton模式。这是一个带有C#的detailed tutorial。