Я написал простой скребок для экрана, чтобы помочь мне сделать словарные флеш-карты для моего урока греческого языка.Он извлекает слова из онлайн-словаря и выводит их в формате, понятном моему менеджеру флеш-карт.
Я не хочу засыпать словарь запросами при каждом запуске скребка, поэтому я кешируюкаждая страница моего жесткого диска при первой загрузке (конечно, это также делает это намного быстрее).Я никогда раньше не занимался кешированием, поэтому я не уверен, что такое лучшие практики для такого рода вещей.Вот мое решение:
using System;
using System.IO;
using System.Net;
using System.Web;
public class PerseusDocument
{
readonly string url;
public PerseusDocument (string url)
{
this.url = url;
... // (load the DOM with a third-party library)
}
static string cacheUrl;
static string CacheUrl {
get {
if (cacheUrl == null) {
cacheUrl = Path.Combine (Environment.GetFolderPath (Environment.SpecialFolder.LocalApplicationData), "perseus");
Directory.CreateDirectory (cacheUrl);
}
return cacheUrl;
}
}
string FullCacheUrl {
get { return Path.Combine (CacheUrl, HttpUtility.UrlEncode (url)); }
}
bool IsCached {
get { return File.Exists (FullCacheUrl); }
}
string Html {
get {
if (IsCached)
return File.ReadAllText (FullCacheUrl);
WebClient client = new WebClient ();
string html = client.DownloadString (url);
using (StreamWriter file = new StreamWriter (FullCacheUrl))
file.Write (html);
return html;
}
}
}
Другими словами, я просто проверяю, существует ли файл с тем же именем, что и URL, в кеше.Если это так, я загружаю его, если нет, я сохраняю HTML в новый файл.Есть ли какие-то вопиющие проблемы с такими действиями?