小编Svi*_*ish的帖子

为什么在从字典中读取时会锁定

我对正在阅读的书中的代码列表,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调用.

通过锁定字典读取实现了什么?
非常感谢您提出的所有意见和见解.

c# multithreading caching dictionary locking

9
推荐指数
1
解决办法
6039
查看次数

将多个JavaScript文件合并为一个是安全的吗?

我正在使用jQuery开发一个动态网站,我发现有几个jQuery插件在这样做时非常有用.

当然,对于我添加的每个插件,在页面加载时还有另一个要加载的脚本.我知道,要快速加载页面,更小和/或更少的资源会更好.

将所有这些jQuery插件文件合并为一个是安全的吗?在我做之前是否需要检查一些内容,或者甚至可以通过服务器端的脚本快速完成这些操作?

javascript file loading jquery-plugins

9
推荐指数
2
解决办法
4129
查看次数

检查MySQL中是否可以删除行

有没有办法可以检查是否有可能删除行?例如,它目前没有通过受限制的外键连接到其他任何东西.

原因:我正在制作一个管理页面,其中列出了系统中的所有用户.它们始终可以被禁用,但也可以删除它们.但是,如果它们没有连接到任何关键的东西,它们只能被删除.如果可以在数据库中轻松完成,我想不必手动检查.

注意:我不想删除任何用户.我只是想显示给用户的管理员可以删除.

mysql foreign-keys delete-row

9
推荐指数
1
解决办法
1959
查看次数

PHP:格式错误的标题

有人可以解释这个PHP代码有什么问题吗?(PHP版本5.3.5)

<?php 
    header('Bad Request', true, 400);
    exit;
Run Code Online (Sandbox Code Playgroud)

我得到状态500而不是400.在apache错误日志中我得到

来自脚本的格式错误的标题 错误的标头=错误的请求:listener.php

我在这做错了什么?我误解了文档吗?

php bad-request http-headers

9
推荐指数
1
解决办法
7102
查看次数

如何列出所有必需的 npm peerDependency

如何列出项目中当前所需的所有对等依赖项?

我尝试过搜索,但只找到了一堆自定义包来检查对等依赖关系。我已经知道它们目前没问题,但我想要一个它们实际上是什么软件包和版本的列表。

关于如何做到这一点有什么想法吗?

npm peer-dependencies

9
推荐指数
1
解决办法
7815
查看次数

C#,Linq2SQL:创建谓词以查找多个范围内的元素

假设我的数据库中有一个名为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)

c# generics extension-methods predicate linq-to-sql

8
推荐指数
1
解决办法
3905
查看次数

SSRS:在报告中汇总TimeSpan值

我有一个报告和一个数据源,其中一列是TimeSpan类型.我使用时Fields!TheTime.Value,TimeSpan值似乎在报告中正确显示,没有问题.

  • 7时02分00秒
  • 5时41分00秒

但是我想对这些值进行求和来得到一个组的总时间.在C#中,我当然可以做一个TimeSpan +另一个TimeSpan,所以我知道它们可以添加.我试过了

=Sum(Fields!TheTime.Value)
Run Code Online (Sandbox Code Playgroud)

但它最终会打印出很多类型.例如,对于上面输出的时间,我会得到457800000000总和.甚至应该是什么?

无论如何,我如何在报告中总结时间跨度值?对于上述时间跨度,我想最终12:43:00得到总和.除非我的脑袋再次在数学上失败了......但是你明白了:p

timespan sum reporting-services

8
推荐指数
1
解决办法
1万
查看次数

SSRS:包含两个数据源的主详细报告

我有两个本地数据源可以推送到报告中.没问题.但是如何设置报告呢?一个数据源包含员工列表以及有关这些员工的信息.另一个包含每个员工的一堆工作时间.

我想在员工列表中使用一个表格,然后在每个员工的工作时间内(另外还有工作时间表).

这甚至可能吗?我必须使用子报告吗?我是否必须将它们合并为一个数据源?= /

c# objectdatasource report reporting-services

8
推荐指数
2
解决办法
1万
查看次数

待机和休眠期间会发生什么?

它只是在前几天打了我.当我告诉计算机进入待机状态或休眠状态时,实际发生了什么?

更具体地说,它对正在运行的代码有什么影响(如果有的话)?例如,如果应用程序正在压缩某些文件,编码视频文件,检查电子邮件,运行数据库查询,生成报告或只处理大量数据或执行复杂的数学操作.怎么了?您最终可能会在视频中出现错误吗?数据库查询失败了吗?数据处理最终会包含错误吗?

我出于一般的好奇心问这个问题,但也因为我开始怀疑这是否是我自己编程时应该考虑的事情.

language-agnostic operating-system

8
推荐指数
1
解决办法
3486
查看次数

为什么我不能为重写属性添加set访问器?

在基类中我有这个属性:

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# inheritance properties accessor

8
推荐指数
2
解决办法
5007
查看次数