1

我有一个 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)
            {
             ............;
             ............;
            } 
4

3 回答 3

1

你可以这样做:

static Dictionary<string, List<MappingFields>> MappingCollections;

public void TicketTrack(Tickets[] tickets)
{
    if (MappingCollections == null) MappingCollections = loadCodes(Location, fileName);

    ...
} 

这将检查映射集合的实例是否存在,如果不存在,则创建它(可能会将其分流到实用程序方法)。

于 2013-06-21T12:49:29.677 回答
0

使其成为静态变量:

private static Dictionary<string, List<MappingFields>> MappingCollections = loadCodes(Location, fileName);

使方法“loadCodes”也是静态的。这样,字典将只为 AppDomain 加载一次。

于 2013-06-21T12:59:20.643 回答
0

您可以使用惰性来实现:

    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;
    }
于 2013-06-21T12:53:29.567 回答