小编All*_* Xu的帖子

锁定模式以正确使用.NET MemoryCache

我假设此代码存在并发问题:

const string CacheKey = "CacheKey";
static string GetCachedData()
{
    string expensiveString =null;
    if (MemoryCache.Default.Contains(CacheKey))
    {
        expensiveString = MemoryCache.Default[CacheKey] as string;
    }
    else
    {
        CacheItemPolicy cip = new CacheItemPolicy()
        {
            AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddMinutes(20))
        };
        expensiveString = SomeHeavyAndExpensiveCalculation();
        MemoryCache.Default.Set(CacheKey, expensiveString, cip);
    }
    return expensiveString;
}
Run Code Online (Sandbox Code Playgroud)

并发问题的原因是多个线程可以获取空键,然后尝试将数据插入缓存.

什么是最简洁,最干净的方法来使这个代码并发证明?我喜欢在缓存相关代码中遵循一个好的模式.链接到在线文章将是一个很大的帮助.

更新:

我根据@Scott Chamberlain的回答提出了这个代码.任何人都可以找到任何性能或并发问题吗?如果这样做,它将节省许多代码和错误.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Caching;

namespace CachePoc
{
    class Program
    {
        static object everoneUseThisLockObject4CacheXYZ = new object();
        const string CacheXYZ = "CacheXYZ";
        static …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading memorycache

110
推荐指数
4
解决办法
9万
查看次数

未找到指定的框架“Microsoft.NETCore.App”,版本“2.2.0”

我使用的是 Visual Studio 2019 版本 16.3.7。我认为这是最新的更新。

当我尝试编译一个基本的 .NET Core 2.2 控制台应用程序时:

在此处输入图片说明

...我收到以下错误:

It was not possible to find any compatible framework version
The specified framework 'Microsoft.NETCore.App', version '2.2.0' was not found.
  - The following frameworks were found:
      1.0.1 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
      2.0.9 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
      2.1.11 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
      2.1.12 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
      2.1.13 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
      3.0.0 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]

You can resolve the problem by installing the specified framework and/or SDK.

The .NET Core frameworks can be found …
Run Code Online (Sandbox Code Playgroud)

visual-studio .net-core

42
推荐指数
2
解决办法
5万
查看次数

服务主体和应用程序注册之间有什么区别?

据我了解,应用程序注册代表一个可能具有供用户登录的 UI 的应用程序。据我了解,服务主体适用于计划批处理应用程序等应用程序。

但从技术角度来看,在Azure门户应用程序注册列表中,我可以看到它们都在列表中并且看起来相同。

是否存在 SP 可以做而应用程序注册不能做的事情,反之亦然?

azure-active-directory

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

.NET 4.0 MemoryCache性能计数器在哪里?

.NET 4.0 MemoryCache性能计数器在哪里?

我正在寻找他们的名字,我找不到任何名字.

谢谢,

.net c# caching .net-4.0 memorycache

27
推荐指数
1
解决办法
6805
查看次数

VS2015 pubxml:如何排除或删除<PublishDatabaseSettings>部分

我需要从Web Deploy发布中排除与数据库相关的设置.我试图删除pubxml文件中的部分,但是当我创建部署包时它会回来.

有没有办法从Web Deploy发布中排除数据库相关设置?

publishing web-deployment pubxml visual-studio-2015

11
推荐指数
1
解决办法
1415
查看次数

将函数源代码添加到源代码控制存储库时如何正确处理 local.settings.json 文件中的机密

我有一个 Azure 函数,其文件中包含一些机密local.settings.json

当我想在 GitHub 中共享函数的源代码时,最佳实践是什么?

到目前为止,我可以想到以下选项,但每个选项都有一些问题或挑战:

local.settings.json1-记住在我提交更改时更改秘密。提交完成后,撤消更改,以便我可以运行该函数并对其进行调试。这个选项非常容易出错并且乏味。

2- 添加 local.settings.json到 .gitignore 文件。通过这种方法,从 GitHub 获取代码的人需要记住恢复local.settings.json

3- 将机密存储在 Azure Key Vault 中。但这对于我正在创建的这么小的功能来说太多了。

我想问这里处理 local.settings.json源代码控制存储库中的机密的最佳实践是什么。

git security azure-functions

11
推荐指数
1
解决办法
9872
查看次数

在 C# 中处理机密的 .env 文件等效于什么?

我在 Node.js 代码中使用 .env 文件来处理开发环境配置中的机密。我将 .env 添加到项目的 .gitignore 中,以防止将机密提交到 git 存储库。

我发现 node.js 的 .env 方法非常简单且高效。

C# 中的 .env 文件相当于什么?

带着这个问题,我并不是在寻找一个在 C# 中执行相同操作的库,例如(https://github.com/tonerdo/dotnet-env

我想知道处理同样事情的 C# 方法,重点是不要将配置文件中的秘密提交到 git 存储库。

这不是 Azure 问题,因此 Azure Key Vault Azure 应用服务超出了此处的范围。

更新#1

请注意,我并不是要求处理我的 .net 应用程序中的机密。

多年来我一直在使用下面文档中的选项:

https://learn.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-6.0&tabs=windows

当我开始学习 Node.js 并使用它时,.env我希望在 .net 中也能拥有同样的东西。

.env当我在开发人员笔记本电脑上开发 Node.js 应用程序时,文件使我不必不断调整环境变量。在生产中我设置了环境变量。

在我的本地开发人员笔记本电脑上,我喜欢将环境变量保存在.env文本文件中。我信任我的本地笔记本电脑加密硬盘,并且我的开发环境中不涉及生产密码。

本质上,我试图避免下面的选项以及在编码时不断调整环境变量的麻烦。

在此输入图像描述

更新#2

.env这种情况可能会凸显文件的优势:

当我开发node.js应用程序时,在 VSCode 中,我.env在单独的选项卡中打开文件,以不断更改变量并在 VSCode 终端中运行我的 Node.js 应用程序。该场景是在调试/跟踪我的应用程序时尝试不同的服务原则、不同的数据库凭据、网络凭据等。c#为了快速在或项目中执行相同的操作.netcode,我必须有一个 bash …

c#

11
推荐指数
1
解决办法
9478
查看次数

';' 在TSQL语句的开头

我不时会看到以分号';'开头的SQL Server语句 如下

;WITH cte
     AS (SELECT ROW_NUMBER() OVER (PARTITION BY Col1, Col2, Col3 
                                       ORDER BY ( SELECT 0)) RN
         FROM   #MyTable)
DELETE FROM cte
WHERE  RN > 1
Run Code Online (Sandbox Code Playgroud)

另一个例子是 ;THROW

为什么确实存在';' TSQL语句的开头

更新1:

请注意,我在询问';' 在陈述的开头.这个问题与此问题不重复

我什么时候应该在SQL Server中使用分号?

更新2:

@MartinSmith的回答很有道理.

为了确保我们对这篇文章有完整的答案,请考虑这篇受人尊敬的文章:

http://www.sommarskog.se/error_handling/Part1.html#jumpTHROW

在这一点上你可能会对自己说:他必须拉我的腿,微软真的称之为命令;那么?不仅仅是那个吗?没错,如果您在联机丛书中查找,则没有领先的分号.但分号必须在那里.正式地说,它是前一个语句的终结符,但它是可选的,并且远非每个人都使用分号来终止它们的T-SQL语句.

我同意@MartinSmith的答案,但似乎这件事情正处于一些非常极端的程度.

通常,在存储过程中,THROW是其自己的行的声明.SQL开发人员不仅仅是合并这样的SQL行而错过了分号.

对我来说,人们更有可能意外地放弃一张桌子,而不是将"THROW"语句与另一行TSQL混合

在上面的引文中解释的情况是极端且罕见的吗?或者我在这里错过了一点?

t-sql sql-server

10
推荐指数
1
解决办法
239
查看次数

Visual Studio 2015 Update 3:"此项目使用SQL Server Express LocalDB.Microsoft建议您将SQL Server Express与IIS一起使用"

使用Visual Studio 2015 Update 2和Update 3

打开项目时出现以下无关错误:

该项目使用SQL Server Express LocalDB.Microsoft建议您将SQL Server Express与IIS一起使用"

在此输入图像描述

在我点击"不要再问"之前,我想知道无关警告的根源是什么以及如何正确解决?

visual-studio visual-studio-2015

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

为什么ASP.NET Core的Startup类不是接口或抽象类?

这是关于Startup这里解释的课程背后的设计原理:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-2.1

我知道这个类需要包含像ConfigureServices或的方法Configure.

为什么CreateDefaultBuilder(args).UseStartup<Startup>()不强制要求任何基类或接口以提高可读性?

有了这种设计方法,有人必须阅读文档并了解魔术方法名称,如ConfigureServicesConfigure.

如果这是新的类设计思维模式的一部分,那么我在哪里可以阅读更多关于它的内容?

c# design-patterns class-design asp.net-core

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