如何在WCF服务器中只加载一次字典
本文关键字:字典 一次 加载 WCF 服务器 | 更新日期: 2023-09-27 18:19:17
我有一个WCF服务,我在其中实现了一些方法(操作契约)。我需要加载一些值从Excel到字典。我可以加载这些值。但是每次当服务成员被访问/使用时,它都会被加载。
我不想每次都加载。只装一次就够了。如何做到这一点。
public class Service1 : IService1
{
Dictionary<string, List<MappingFields>> MappingCollections;
public Service1()
{
MappingCollections = loadCodes(Location, fileName);
}
}
#region IService1 Members
public void TicketTrack(Tickets[] tickets)
{
............;
............;
}
你可以这样做:
static Dictionary<string, List<MappingFields>> MappingCollections;
public void TicketTrack(Tickets[] tickets)
{
if (MappingCollections == null) MappingCollections = loadCodes(Location, fileName);
...
}
这将检查是否存在映射集合实例,如果不存在,则创建它(可能会将其转移到实用程序方法中)。
您可以使用lazy来实现:
private static Lazy<Dictionary<string, List<MappingFields>>> MappingCollections =
new Lazy<Dictionary<string, List<MappingFields>>>(x => loadCodes(Location, fileName));
public void TicketTrack(Tickets[] tickets)
{
var myData = MappingCollections.Value;
}
设置为静态变量:
private static Dictionary<string, List<MappingFields>> MappingCollections = loadCodes(Location, fileName);
使方法'loadCodes'也是静态的。这样,字典只会为AppDomain加载一次。