ASP.NET MVC - 加载 Maxmind dat 文件
Posted
技术标签:
【中文标题】ASP.NET MVC - 加载 Maxmind dat 文件【英文标题】:ASP.NET MVC - Loading Maxmind dat file 【发布时间】:2010-08-09 23:05:20 【问题描述】:我计划使用 Maxmind 的 DAT 文件在我正在开发的 ASP.NET MVC 应用程序中提供一些基本的地理定位功能。 DAT 文件大约 17mb,我想知道在我的应用程序中加载它的最佳方法是什么 - 显然我不想在每次需要一些地理信息时都加载它,我认为最好的做法是在应用程序启动时将其加载到共享变量中。
其他人是如何处理这个问题的?有什么建议吗? 谢谢
日本
【问题讨论】:
【参考方案1】:缓存是一个糟糕的地方来存储它。它可能会在没有通知的情况下被清除,因此您必须在它被删除时重新加载它。
Maxmind supplies a .NET API 处理他们的 DAT 文件。打包为 tar.gz(描述为“用于 GeoIP 城市、国家、ISP 等的开源 C# API”)已经有一个选项可以有效地将数据加载到私有缓存中,例如:
var lookupService = new LookupService("path.to.my.dat", LookupService.GEOIP_MEMORY_CACHE);
【讨论】:
我已成功使用此 API。真的很快。 代替原来的 MaxMind C# API 版本(位于maxmind.com/app/csharp),你可以尝试使用code.google.com/p/geoipsharp的稍微修改的版本【参考方案2】:在我看来,HttpRuntime.Cache 是保存这些数据的最佳位置。有关如何从缓存中添加和删除内容的信息,请参阅 here。
【讨论】:
+1 - 正是我所建议的。事实上,这种机制可以根据您的需要简单或功能齐全。在我的应用程序中,我已经将它发展到这样一个阶段,即 lambda 和匿名函数会处理我所有的“强类型”对象,因此对缓存的请求要么填充它,要么获取给定键的内容。这是一个绝对需要计划的策略,但是一旦确定了您的“关键”计划,那就不费吹灰之力了。我可以删除一个指向我的实现的链接(可单元测试,因为它使用到包装器的接口)以上是关于ASP.NET MVC - 加载 Maxmind dat 文件的主要内容,如果未能解决你的问题,请参考以下文章
加载 ASP.Net MVC JSONResult jQuery DataTables