对于想了解cocoa–NSURLThumbnailDictionaryKey为本地文件为空的读者,本文将提供新的信息,我们将详细介绍filedoesnotcontaindictionary,并且为您提
对于想了解cocoa – NSURLThumbnailDictionaryKey为本地文件为空的读者,本文将提供新的信息,我们将详细介绍file does not contain dictionary,并且为您提供关于.net Redis分布式锁,Dictionary,ConcurrentDictionary 介绍、.net 大数据量,查找 Where 优化(List 的 Contains 与 Dictionary 的 ContainsKey 的比较)、asp.net-mvc – Url.Action with RouteValueDictionary with Protocol、Azure CLI Dynaic Query Consumption Cost Data (az consumption usage list)的有价值信息。
本文目录一览:- cocoa – NSURLThumbnailDictionaryKey为本地文件为空(file does not contain dictionary)
- .net Redis分布式锁,Dictionary,ConcurrentDictionary 介绍
- .net 大数据量,查找 Where 优化(List 的 Contains 与 Dictionary 的 ContainsKey 的比较)
- asp.net-mvc – Url.Action with RouteValueDictionary with Protocol
- Azure CLI Dynaic Query Consumption Cost Data (az consumption usage list)
cocoa – NSURLThumbnailDictionaryKey为本地文件为空(file does not contain dictionary)
NSDictionary *thumbnails = nil; BOOL success = [fileURL getResourceValue:&thumbnails forKey:NSURLThumbnailDictionaryKey error: &error];
如果我连接到iCloud,这可以正常工作,URL是指向存储在iCloud中的文件的链接. fileURL类似于:
file:///Users/me/Library/Mobile%20Documents/BJXXglr9R3~com~myapp~icloud/FileStorage/contact-page%20copy.png
但是,如果我使用指向本地文件的NSURL使用相同的代码,则缩略图字典为空.
以下是此案例中URL的示例:
file:///Users/me/Library/Containers/com.mycompany.mymacapp/Data/Library/Application%20Support/com.mycompany.mymacapp/FileStorage/Bn4VaCncuaEJjLb.png-large.png
这个getResourceValue API是不是应该与本地存储的文件一起使用?或者我做错了什么?
解决方法
[url startAccessingSecurityScopedResource]; NSFileCoordinator *coordinator = [[NSFileCoordinator alloc] init]; __block NSError *error; [coordinator coordinateReadingItemAtURL:url options:0 error:&error byAccessor:^(NSURL *newURL) { [newURL getResourceValue:&image forKey:NSURLThumbnailDictionaryKey error:&error]; }]; [url stopAccessingSecurityScopedResource];
.net Redis分布式锁,Dictionary,ConcurrentDictionary 介绍
1、背景
在计算机世界里,对于锁大家并不陌生,在现代所有的语言中几乎都提供了语言级别锁的实现,为什么我们的程序有时候会这么依赖锁呢?这个问题还是要从计算机的发展说起,随着计算机硬件的不断升级,多核cpu,多线程,多通道等技术把计算机的计算速度大幅度提升,原来同一时间只能执行一条cpu指令的时代已经过去。随着多条cpu指令可以并行执行的原因,原来不曾出现的资源竞争随着出现,在程序中的体现就是随处可见的多线程环境。比如要更新数据库的一个信息,如果没有并发控制,多个线程同时操作的话,就会出现互相覆盖的现象发生。
锁要解决的就是资源竞争的问题,也就是要把执行的指令顺序化。
在互联网背景下,电商行业是普遍都是多线程执行,并发量大。比如下单秒杀抢购商品活动,属于高并发情况,库存的保证就尤其重要了,不能出现超卖现象。程序员所要做的事情就是需要单线程执行获取库存,再减库存操作,保证数据原子性。
在多台服务器中,锁就是重点。
2、应用
我们先来介绍下单线程下的情况,假设有个商品A,库存500件,假设每次购买1件,单价1元,这样就只有是500次下单时成功的,其他都不能下单。
2.1 Store商品存储-Dictionary
数据库不存在的情况下,用Dictionary来代替
创建了Store后,主程序创建下单,单线程执行。
执行结果:
执行正常,4人不能下单。
改成多线程执行,直接出现超卖现象,其中用Task.Run 模拟多线程,其中Order(int i) i变量注意,不能直接填写i,异步中上下文不存在,因为主线程以及跑完了,再运行异步Task线程,这时变量已是最后一个被覆盖。
解决方案是重复赋值变量替换
结果:
500多的人都买了。
解决方案:
2.1.1 lock 加锁
lock很明显影响性能。
执行结果:
正常。
2.1.2 使用ConcurrentDictionary
ConcurrentDictionary 本身是线程安全的,源代码就是加了lock
执行结果符合。
2.2 用Redis分布式锁
redis是单线程运行,所以适合。原理也很简单,运用redis以下指令
1、SETNX
SETNX key val:当且仅当key不存在时,set一个key为val的字符串,返回1;若key存在,则什么都不做,返回0。
2、expire
expire key timeout:为key设置一个超时时间,单位为second,超过这个时间锁会自动释放,避免死锁。
3、delete
delete key:删除key
在使用Redis实现分布式锁的时候,主要就会使用到这三个命令。
原理如下:
1、先获取redis锁,设置一个随机字符串
执行了805次,看下输出最后数量有没有小于0
结果显示0,正确,没超卖
.net 大数据量,查找 Where 优化(List 的 Contains 与 Dictionary 的 ContainsKey 的比较)
最近优化一个 where 查询条件,查询时间很慢,改为用 Dictionary 就很快了。
一、样例
假设:listPicsTemp 有 100w 条数据,pictures 有 1000w 条数据。
使用第 1 段代码执行超过 2 分钟。
var listPicsTemp = new List<string>();
pictures = pictures.AsParallel().Where(d => listPicsTemp.Contains(d.Pic)).ToList();
使用第 2 段代码执行十几毫秒。
var listPicsTemp = new List<string>();
var dicPicsTemp = listPicsTemp.Where(d => d != null).Distinct().ToDictionary(d => d);//使用Dictionary类型,速度快很多
pictures = pictures.AsParallel().Where(d => dicPicsTemp.ContainsKey(d.Pic)).ToList();
二、为什么 Dictionary 这么快呢?查看了一下微软官方文档。
下面截图来源:https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.generic.dictionary-2?view=netframework-4.7.2
三、查看源码
List 的源码:https://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs,cf7f4095e4de7646
List 的 Contains,是循环 for 查找的。
Dictionary 的源码: https://referencesource.microsoft.com/#mscorlib/system/collections/generic/dictionary.cs,bcd13bb775d408f1
Dictionary 的 ContainsKey,是通过 hash 查找的。
四、小结:
1、Dictionary<TKey,TValue> 类实现为哈希表。ContainsKey () 内部是通过 Hash 查找实现的,查询的时间复杂度是 O (1)。所以,查询很快。(List 的 Contains 是通过 for 查找的)
2、Dictionary 不是线程安全的。(查看微软官方文档,确实能学到很多知识盲区。)
asp.net-mvc – Url.Action with RouteValueDictionary with Protocol
我需要生成一个完整的URL(例如http://www.domain.com/controller/action?a=1\u0026amp;b=2),一般来说,我只需使用Url.Action
就可以通过指定协议来完成此任务:
var url = Url.Action("Action","Controller",new { a = 1,b = 2 },"http");
我已经开始组合一个返回RouteValueDictionary的类,以使这些匿名对象消失.但是,我不能让它与帮手一起工作.
var x = Url.Action("Action",new RouteValueDictionary(new { a = 1,b = 2 }),"http"); // "http://127.0.0.1/Controller/Action?Count=2&Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.Object%5D&Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.Object%5D",var y = Url.Action("Action","http"); // "http://127.0.0.1/Controller/Action?a=1&b=2"
任何指向一个facepalm的指针非常感谢:)
更新:
最好澄清一点,在上面的例子中,我需要让’X’变量工作正常,因为RouteValueDictionary是在代码的其他地方创建的.假设RouteValueDictionary是正确的.
我只是不明白为什么这个工作与匿名对象,但是包装在同一个对象中的同一个对象包裹在一个RouteValueDictionary中,使得帮助者变得怪异了.
解决方法
要测试这个,添加一个hostName参数来选择如下所示的重载:
编辑
您可以在项目中使用此扩展,将您需要的重载添加到Url.Action.在内部,它将从请求中解析并添加hostName.
public static string Action (this UrlHelper helper,string action,string controller,RouteValueDictionary routeValues,string protocol) { string hostName = helper.RequestContext.HttpContext.Request.Url.Host; return helper.Action(action,controller,routeValues,protocol,hostName); }
Azure CLI Dynaic Query Consumption Cost Data (az consumption usage list)

我们今天的关于cocoa – NSURLThumbnailDictionaryKey为本地文件为空和file does not contain dictionary的分享就到这里,谢谢您的阅读,如果想了解更多关于.net Redis分布式锁,Dictionary,ConcurrentDictionary 介绍、.net 大数据量,查找 Where 优化(List 的 Contains 与 Dictionary 的 ContainsKey 的比较)、asp.net-mvc – Url.Action with RouteValueDictionary with Protocol、Azure CLI Dynaic Query Consumption Cost Data (az consumption usage list)的相关信息,可以在本站进行搜索。
本文标签: