如何在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)
            {
             ............;
             ............;
            } 

如何在WCF服务器中只加载一次字典

你可以这样做:

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加载一次。