当前位置: 首页 > news >正文

南京做信息登记公司网站有哪些线上做酒店的网站

南京做信息登记公司网站,有哪些线上做酒店的网站,个人证书查询,云南公司网站制作内存缓存和本地文件缓存技术 如果每个瓦片图每次打开都要重新加载#xff0c;会比较浪费资源#xff0c;而且如果网络不好#xff0c;甚至要等很久#xff0c;于是可以使用内存缓存#xff0c;每次已经加载的瓦片图#xff0c;第二次再加载之前#xff0c;先看看内存中…内存缓存和本地文件缓存技术 如果每个瓦片图每次打开都要重新加载会比较浪费资源而且如果网络不好甚至要等很久于是可以使用内存缓存每次已经加载的瓦片图第二次再加载之前先看看内存中有没有这就是内存缓存技术。但是软件已关闭内存数据全部清空了下次再打开又要重新加载比较浪费资源于是可以使用本地文件缓存技术也就是离线地图。 /// summary /// 缓存管理 /// /summary internal class CacheManager : IDisposable {/// summary/// 默认缓存一个G/// /summarypublic int MemoryMaxCacheSize 1000000;/// summary/// 当前已经使用的内存缓存大小/// /summarypublic long CurrentMemoryCacheSize 0;/// summary/// 缓存/// /summaryprivate HashSetstring LocalCache new HashSetstring();/// summary/// 内存缓存/// /summaryprivate IntPtr MemoryCache IntPtr.Zero;/// summary/// 是否已经释放/// /summaryprivate bool isDisposed false;/// summary/// 内存缓存数据缓存区域/// /summaryprivate Dictionarystring, MemoryRange MemoryCacheDataRange new Dictionarystring, MemoryRange();/// summary/// 缓存文件夹/// /summarypublic string CacheFolder Path.Combine(AppDomain.CurrentDomain.BaseDirectory, map_caches);/// summary/// 是否开启本地文件缓存/// /summaryprivate bool IsOpenLocalCache true;/// summary/// 是否开启内存缓存/// /summaryprivate bool IsOpenMemoryCache true;/// summary/// 内存缓存是否已经满了/// /summaryprivate bool IsMemoryFull false;/// summary/// 锁/// /summaryprivate object MemoryLocked new object();private object LocalLocked new object();/// summary/// 构造函数/// /summary/// param namesize内存缓存大小/param/// param nameunit内存缓存单位/param/// param nameisOpenLocalCache是否开启文件缓存/param/// param nameisOpenMemoryCache是否开启内存缓存/parampublic CacheManager(int size, MemorySizeUnit unit, bool isOpenLocalCache, bool isOpenMemoryCache){switch (unit){case MemorySizeUnit.GB:MemoryMaxCacheSize size * 1024 * 1024 * 1024;break;case MemorySizeUnit.MB:MemoryMaxCacheSize size * 1024 * 1024;break;case MemorySizeUnit.KB:MemoryMaxCacheSize size * 1024;break;default:break;}IsOpenLocalCache isOpenLocalCache;IsOpenMemoryCache isOpenMemoryCache;MemoryCache Marshal.AllocHGlobal(MemoryMaxCacheSize);InitCacheMode();}/// summary/// 析构函数/// /summary~CacheManager(){Dispose(false);}/// summary/// 初始化缓存模型/// /summarypublic void InitCacheMode(){if (IsOpenLocalCache){Debug.WriteLine(地图开启缓存模式...);// 如果开启缓存模式if (!Directory.Exists(CacheFolder)){Directory.CreateDirectory(CacheFolder);}var dirs Directory.GetDirectories(CacheFolder);foreach (var dir in dirs){foreach (var file in Directory.GetFiles(dir)){LocalCache.Add(file);}}}}/// summary/// 读取或者添加一个内存缓存/// /summary/// param namename/param/// param namememoryData/param/// param namesize/param/// returns/returnspublic unsafe (MemoryRange, bool) ReadOrSetFromMemoryCache(string name, System.Drawing.Bitmap map null){lock (MemoryLocked){if (map null){MemoryRange memory null;MemoryCacheDataRange.TryGetValue(name, out memory);return (memory, true);}else{if(IsMemoryFull){return (null, false);}var size map.Width * map.Height * 3;if(CurrentMemoryCacheSize size MemoryMaxCacheSize){IsMemoryFull true;return (null, false);}var range new MemoryRange(CurrentMemoryCacheSize, CurrentMemoryCacheSize size, MemoryCache (int)CurrentMemoryCacheSize);var mapData map.LockBits(new System.Drawing.Rectangle(new System.Drawing.Point(), map.Size), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);Buffer.MemoryCopy(mapData.Scan0.ToPointer(), range.Address.ToPointer(), range.Length, (int)range.Length);map.UnlockBits(mapData);MemoryCacheDataRange.Add(name, range);CurrentMemoryCacheSize size;return (range, true);}}}/// summary/// 读取或者添加一个文件缓存/// /summary/// param namename/param/// param namememoryData/param/// param namesize/param/// returns/returnspublic bool ReadOrSetFromLocalCache(string name, bool isGet){lock (LocalLocked){if (isGet){if (LocalCache.Contains(name)){return true;}return false;}else{// 如果已经存在本地了 则不需要重新添加if (LocalCache.Contains(name))return false;LocalCache.Add(name);return true;}}}/// summary/// 获取缓存文件路径/// /summary/// param nameblock/param/// returns/returnsprivate string GetCacheFilePath(TitleBlock titleBlock){var dir Path.Combine(CacheFolder, titleBlock.Level.ToString());if (Directory.Exists(dir) is false) Directory.CreateDirectory(dir);var fileName string.Format({0}\\{1}, dir, titleBlock.ToCacheFileName());return fileName;}/// summary/// 读取数据/// /summary/// param nameblock/param/// returns/returnspublic async TaskMemoryRange ReadTitleData(TitleBlock block){MemoryRange address null;string memoryCacheName block.ToCacheKey(); //内存缓存名称string localCacheName GetCacheFilePath(block); //本地文件缓存名称if (IsOpenMemoryCache){address ReadOrSetFromMemoryCache(memoryCacheName).Item1;}// 如果从内存中直接读取出来则直接返回if (address ! null) return address;System.Drawing.Bitmap bitmap null;// 如果 开启了文本本地缓存并且文件确实在本地有缓存if (IsOpenLocalCache ReadOrSetFromLocalCache(localCacheName, true)){// 从文件中读取数据bitmap ReadDataFromLocalFile(localCacheName);}// 如果文件中不存在 进行下载if(bitmap null){bitmap await ReadDatasFromHttp(block.Url, localCacheName);}// 存入内存if (bitmap ! null IsOpenMemoryCache){// 存入内存var res ReadOrSetFromMemoryCache(memoryCacheName, bitmap);// 如果保存成功了if (res.Item2){address res.Item1;bitmap.Dispose();}else{address new MemoryRange(0, bitmap.Width * 3 * bitmap.Height, IntPtr.Zero) { Bitmap bitmap };}}// 如果获取到图片并且不需要内存缓存则直接使用else if (bitmap ! null !IsOpenMemoryCache address null){address new MemoryRange(0, bitmap.Width * 3 * bitmap.Height, IntPtr.Zero) { Bitmap bitmap };}return address;}/// summary/// 转换位图/// /summary/// param namejpegDatas/param/// param nameisSaveToLocal/param/// param namelocalPath/param/// returns/returnsprivate System.Drawing.Bitmap ConvertToBmpDatas(MemoryStream jpegDatas, bool isSaveToLocal, string localPath){System.Drawing.Bitmap jpeg System.Drawing.Image.FromStream(jpegDatas) as System.Drawing.Bitmap;if (isSaveToLocal){jpeg.Save(localPath, System.Drawing.Imaging.ImageFormat.Bmp);}return jpeg;}/// summary/// 从http中读取数据/// /summary/// param nameurl/param/// param namelocalCacheName/param/// returns/returnsprivate async TaskSystem.Drawing.Bitmap ReadDatasFromHttp(Uri url, string localCacheName){System.Drawing.Bitmap bitmap null;int tryTimes 10;using (HttpClient Client new HttpClient()){while (tryTimes-- 0 bitmap null){try{var res await Client.GetAsync(url);if (res.StatusCode System.Net.HttpStatusCode.OK){var stream await res.Content.ReadAsStreamAsync() as MemoryStream;// 读取数据并且检测是否保存到本地文件bitmap ConvertToBmpDatas(stream, IsOpenLocalCache, localCacheName);// 添加一个本地的文件缓存信息if (IsOpenLocalCache){ReadOrSetFromLocalCache(localCacheName, false);}if (bitmap ! null) return bitmap;}}catch (Exception ex) { }}}return bitmap;}/// summary/// 从本地文件缓存中加载数据/// /summary/// param namelocalCacheName本地缓存文件名称/param/// returns/returnsprivate Bitmap ReadDataFromLocalFile(string localCacheName){try{var bitmap new System.Drawing.Bitmap(localCacheName);if (bitmap null || bitmap.Width 0 || bitmap.Height 0){if (bitmap ! null) bitmap.Dispose();bitmap null;}return bitmap;}catch (Exception ex){return null;}}/// summary/// 释放/// /summarypublic void Dispose(){Dispose(true);}public void Dispose(bool dispose){if (isDisposed){return;}if (dispose){// 释放托管的 IDispose 对象}// 释放非托管内容Marshal.FreeHGlobal(MemoryCache);isDisposed true;} }获取瓦片的时候 /// summary /// 读取数据 /// /summary /// returns/returns public TaskMemoryRange ReadStream() CacheManager.ReadTitleData(this);
http://www.zqtcl.cn/news/777366/

相关文章:

  • 农庄网站模板网络文化经营许可证图片
  • 微信做模板下载网站有哪些内容江苏省常州建设高等职业技术学校网站
  • 网站开发补充合同范本docker 部署wordpress
  • 学会了php的语法怎么做网站海外推广媒体
  • 东莞网站建设排行企业网站开发公司大全
  • wordpress商城必备软件重庆seo优化推广
  • 蚌埠百度做网站山东省无障碍网站建设标准
  • 平乡企业做网站流量精灵官网
  • 厦门做网站优化公司wordpress cx-udy
  • 做外汇门户网站WordPress推广返佣插件
  • c语言在线编程网站学生个人网页设计作品
  • 南阳网站排名优化报价wordpress视频付费
  • 政务新网站建设ipv6改造wordpress
  • 店招免费设计在线生成网站seo优化关键词快速排名上首页
  • 毕设做系统与网站答辩wordpress个人模板
  • 农家乐网站建设wordpress改变访问目录结构
  • 单位网站建设的重要性盐城城南建设局一局网站
  • 网站登录验证码显示不出来刘强东当年做网站读的什么书
  • 网站seo优化步骤动态ip可以做网站
  • 用自己电脑怎么做网站广州公司建站
  • 购物网站前端浮动特效怎么做常用开发工具
  • 网页设计与制作精品课程网站wordpress文章页禁止右键
  • 英迈思做网站做的怎样中国建设银行官方网站纪念币
  • 最专业的手机网站建设厦门建设厅网站
  • 贵州省建设工程质量检测协会网站c 网站开发类似优酷
  • 关于网站建设申请卢沟桥做网站的公司
  • 网站源码对应的数据库怎么做单页成品网站
  • 网站分为哪几类上海人才网官网招
  • 网站建设的常见技术有哪些方面网站联系我们模块怎么做
  • 外贸网站建设专业上海四大设计院是哪四个