我对正在阅读的书中的代码列表,Nutshell中的C#3以及线程感到困惑.在关于应用程序服务器中的线程安全的主题中,下面的代码是作为UserCache的示例给出的:
static class UserCache
{
static Dictionary< int,User> _users = new Dictionary< int, User>();
internal static User GetUser(int id)
{
User u = null;
lock (_users) // Why lock this???
if (_users.TryGetValue(id, out u))
return u;
u = RetrieveUser(id); //Method to retrieve from databse
lock (_users) _users[id] = u; //Why lock this???
return u;
}
}
Run Code Online (Sandbox Code Playgroud)
作者解释了为什么RetrieveUser方法没有锁定,这是为了避免长时间锁定缓存.
我很困惑为什么要锁定TryGetValue和字典的更新,因为即使上面的字典正在被更新两次,如果2个线程同时使用相同的未检索的id调用.
通过锁定字典读取实现了什么?
非常感谢您提出的所有意见和见解.
我正在使用jQuery开发一个动态网站,我发现有几个jQuery插件在这样做时非常有用.
当然,对于我添加的每个插件,在页面加载时还有另一个要加载的脚本.我知道,要快速加载页面,更小和/或更少的资源会更好.
将所有这些jQuery插件文件合并为一个是安全的吗?在我做之前是否需要检查一些内容,或者甚至可以通过服务器端的脚本快速完成这些操作?
有没有办法可以检查是否有可能删除行?例如,它目前没有通过受限制的外键连接到其他任何东西.
原因:我正在制作一个管理页面,其中列出了系统中的所有用户.它们始终可以被禁用,但也可以删除它们.但是,如果它们没有连接到任何关键的东西,它们只能被删除.如果可以在数据库中轻松完成,我想不必手动检查.
注意:我不想删除任何用户.我只是想显示给用户的管理员可以删除.
有人可以解释这个PHP代码有什么问题吗?(PHP版本5.3.5)
<?php
header('Bad Request', true, 400);
exit;
Run Code Online (Sandbox Code Playgroud)
我得到状态500而不是400.在apache错误日志中我得到
来自脚本的格式错误的标题 错误的标头=错误的请求:listener.php
我在这做错了什么?我误解了文档吗?
如何列出项目中当前所需的所有对等依赖项?
我尝试过搜索,但只找到了一堆自定义包来检查对等依赖关系。我已经知道它们目前没问题,但我想要一个它们实际上是什么软件包和版本的列表。
关于如何做到这一点有什么想法吗?
假设我的数据库中有一个名为Stuff的东西,名为Id.从用户那里我得到一系列选定的Range对象(或者我是从输入中创建它们)和他们想要的ID.该结构的精简版本如下所示:
public struct Range<T> : IEquatable<Range<T>>, IEqualityComparer<Range<T>>
{
public T A;
public T B;
public Range(T a, T b)
{
A = a;
B = b;
}
...
}
Run Code Online (Sandbox Code Playgroud)
所以有人可以得到:
var selectedRange = new List<Range<int>>
{
new Range(1, 4),
new Range(7,11),
};
Run Code Online (Sandbox Code Playgroud)
然后我想用它来创建一个谓词,只选择那些之间具有值的东西.例如,使用PredicateBuilder,我可以这样做:
var predicate = PredicateBuilder.False<Stuff>();
foreach (Range<int> r in selectedRange)
{
int a = r.A;
int b = r.B;
predicate = predicate.Or(ø => ø.Id >= a && ø.Id <= b);
}
Run Code Online (Sandbox Code Playgroud)
然后:
var stuff = datacontext.Stuffs.Where(predicate).ToList(); …
Run Code Online (Sandbox Code Playgroud) 我有一个报告和一个数据源,其中一列是TimeSpan类型.我使用时Fields!TheTime.Value
,TimeSpan值似乎在报告中正确显示,没有问题.
但是我想对这些值进行求和来得到一个组的总时间.在C#中,我当然可以做一个TimeSpan +另一个TimeSpan,所以我知道它们可以添加.我试过了
=Sum(Fields!TheTime.Value)
Run Code Online (Sandbox Code Playgroud)
但它最终会打印出很多类型.例如,对于上面输出的时间,我会得到457800000000
总和.甚至应该是什么?
无论如何,我如何在报告中总结时间跨度值?对于上述时间跨度,我想最终12:43:00
得到总和.除非我的脑袋再次在数学上失败了......但是你明白了:p
我有两个本地数据源可以推送到报告中.没问题.但是如何设置报告呢?一个数据源包含员工列表以及有关这些员工的信息.另一个包含每个员工的一堆工作时间.
我想在员工列表中使用一个表格,然后在每个员工的工作时间内(另外还有工作时间表).
这甚至可能吗?我必须使用子报告吗?我是否必须将它们合并为一个数据源?= /
它只是在前几天打了我.当我告诉计算机进入待机状态或休眠状态时,实际发生了什么?
更具体地说,它对正在运行的代码有什么影响(如果有的话)?例如,如果应用程序正在压缩某些文件,编码视频文件,检查电子邮件,运行数据库查询,生成报告或只处理大量数据或执行复杂的数学操作.怎么了?您最终可能会在视频中出现错误吗?数据库查询失败了吗?数据处理最终会包含错误吗?
我出于一般的好奇心问这个问题,但也因为我开始怀疑这是否是我自己编程时应该考虑的事情.
在基类中我有这个属性:
public virtual string Text
{
get { return text; }
}
Run Code Online (Sandbox Code Playgroud)
我想覆盖它并返回一个不同的文本,但我也希望能够设置文本,所以我这样做:
public override string Text
{
get { return differentText; }
set { differentText = value; }
}
Run Code Online (Sandbox Code Playgroud)
然而,这不起作用.我得到一个红色的波浪形,set
说我无法覆盖,因为它没有设置访问器.为什么这是个问题?我该怎么办?
c# ×4
accessor ×1
bad-request ×1
caching ×1
delete-row ×1
dictionary ×1
file ×1
foreign-keys ×1
generics ×1
http-headers ×1
inheritance ×1
javascript ×1
linq-to-sql ×1
loading ×1
locking ×1
mysql ×1
npm ×1
php ×1
predicate ×1
properties ×1
report ×1
sum ×1
timespan ×1