c# – Silverlight从’哑’服务器加载参考数据点播

我有一个文本文件,其中包含300,000个单词的列表以及它们出现的频率.每行的格式为Word:FequencyOfOccurence.

我希望可以从C#代码中访问此信息.我不能硬编码列表,因为它太长了,我不知道如何从服务器上的文件访问它.理想情况下,我理想情况下只有在使用时才能下载信息(节省带宽)但这不是一个高优先级,因为文件不是太大而且互联网速度总是在增加.

它不需要用于绑定.

项目构建完成后,无需编辑该信息. 最佳答案 这是另一种选择.压缩文件并将其粘贴在应用程序XAP旁边的clientBin文件夹中.然后在应用程序中需要内容的地方执行以下操作: –

 public void GetWordFrequencyResource(Action<string> callback)
 {
     WebClient client = new WebClient();
     client.OpenReadAsync += (s, args) =>
     {
       try
       {
         var zipRes = new StreamResourceInfo(args.Result, null)
         var txtRes = Application.GetResourceStream(zipRes, new Uri("WordFrequency.txt", UriKind.Relative));
         string result = new StreamReader(txtRes.Stream).ReadToEnd();

         callback(result);
       }
       catch
       {
         callback(null);  //Fetch failed.
       } 

     }
     client.OpenReadAsync(new Uri("WordFrequency.zip", UriKind.Relative"));
 }

用法:-

 var wordFrequency = new Dictionary<string, int>();
 GetWordFrequencyResource(s =>
 {
    // Code here to burst string into dictionary.
 });
 // Note code here is asynchronous with the building of the dictionary don't attempt to 
 // use the dictionary here.

上面的代码允许您以高效的zip格式存储文件,但不能在XAP本身中存储.因此,您可以按需下载它.它利用了XAP是一个zip文件的事实,因此可以在zip文件上使用旨在从XAP文件中提取资源的Application.GetResourceStream.

顺便说一句,我实际上并不建议你使用字典,我只是用字典作为简单的例子.实际上我会想象文件是按顺序排列的.如果是这种情况,您可以使用KeyValuePair< string,int>对于每个条目,但创建一个自定义集合类型,将它们保存在数组或列表中,然后使用一些二进制搜索方法来索引它.

点赞