我假设此代码存在并发问题:
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) 我使用的是 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) 据我了解,应用程序注册代表一个可能具有供用户登录的 UI 的应用程序。据我了解,服务主体适用于计划批处理应用程序等应用程序。
但从技术角度来看,在Azure门户应用程序注册列表中,我可以看到它们都在列表中并且看起来相同。
是否存在 SP 可以做而应用程序注册不能做的事情,反之亦然?
.NET 4.0 MemoryCache性能计数器在哪里?
我正在寻找他们的名字,我找不到任何名字.
谢谢,
我需要从Web Deploy发布中排除与数据库相关的设置.我试图删除pubxml文件中的部分,但是当我创建部署包时它会回来.
有没有办法从Web Deploy发布中排除数据库相关设置?
我有一个 Azure 函数,其文件中包含一些机密local.settings.json
。
当我想在 GitHub 中共享函数的源代码时,最佳实践是什么?
到目前为止,我可以想到以下选项,但每个选项都有一些问题或挑战:
local.settings.json
1-记住在我提交更改时更改秘密。提交完成后,撤消更改,以便我可以运行该函数并对其进行调试。这个选项非常容易出错并且乏味。
2- 添加 local.settings.json
到 .gitignore 文件。通过这种方法,从 GitHub 获取代码的人需要记住恢复local.settings.json
3- 将机密存储在 Azure Key Vault 中。但这对于我正在创建的这么小的功能来说太多了。
我想问这里处理 local.settings.json
源代码控制存储库中的机密的最佳实践是什么。
我在 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 …
我不时会看到以分号';'开头的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:
请注意,我在询问';' 在陈述的开头.这个问题与此问题不重复
更新2:
@MartinSmith的回答很有道理.
为了确保我们对这篇文章有完整的答案,请考虑这篇受人尊敬的文章:
http://www.sommarskog.se/error_handling/Part1.html#jumpTHROW
在这一点上你可能会对自己说:他必须拉我的腿,微软真的称之为命令;那么?不仅仅是那个吗?没错,如果您在联机丛书中查找,则没有领先的分号.但分号必须在那里.正式地说,它是前一个语句的终结符,但它是可选的,并且远非每个人都使用分号来终止它们的T-SQL语句.
我同意@MartinSmith的答案,但似乎这件事情正处于一些非常极端的程度.
通常,在存储过程中,THROW是其自己的行的声明.SQL开发人员不仅仅是合并这样的SQL行而错过了分号.
对我来说,人们更有可能意外地放弃一张桌子,而不是将"THROW"语句与另一行TSQL混合
在上面的引文中解释的情况是极端且罕见的吗?或者我在这里错过了一点?
使用Visual Studio 2015 Update 2和Update 3
打开项目时出现以下无关错误:
该项目使用SQL Server Express LocalDB.Microsoft建议您将SQL Server Express与IIS一起使用"
在我点击"不要再问"之前,我想知道无关警告的根源是什么以及如何正确解决?
这是关于Startup
这里解释的课程背后的设计原理:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-2.1
我知道这个类需要包含像ConfigureServices
或的方法Configure
.
为什么CreateDefaultBuilder(args).UseStartup<Startup>()
不强制要求任何基类或接口以提高可读性?
有了这种设计方法,有人必须阅读文档并了解魔术方法名称,如ConfigureServices
或Configure
.
如果这是新的类设计思维模式的一部分,那么我在哪里可以阅读更多关于它的内容?
c# ×4
.net ×2
memorycache ×2
.net-4.0 ×1
.net-core ×1
asp.net-core ×1
caching ×1
class-design ×1
git ×1
publishing ×1
pubxml ×1
security ×1
sql-server ×1
t-sql ×1