gpt4 book ai didi

c# - 锁定 String.Format()

转载 作者:行者123 更新时间:2023-11-30 22:07:27 27 4
gpt4 key购买 nike

我在 asp.net mvc 应用程序中实现缓存,并在刷新缓存时防止查询运行多次,我在任何数据库访问代码周围使用锁。

由于我对每条数据都有一个唯一的缓存键,我认为锁定该字符串可能是个好主意。但有时要获取的数据对于特定用户而言是唯一的(例如,用户 X 撰写的所有评论),因此我使用 String.Format() 将用户的 ID 放入缓存键中。

这是一个例子:

    private const string cacheKey = "blog_comments_from_specific_user-{0}";

private List<Comments> GetCommentsFromuser(int userId)
{
if (GetCache(String.Format(cacheKey, userId)) == null)
{
lock (String.Format(cacheKey, userId))
{
if (GetCache(String.Format(cacheKey, userId)) == null)
{
// get data from database
}
}
}
}

我希望数据库代码对每个唯一的字符串内容只运行一次,但我不确定它是否正在这样做。我还没有找到测试它的方法。我读到有一个 String.Intern() 方法可以锁定特定的字符串内容,但我是否也需要它或者 String.Format() 是否足够?

最佳答案

不要锁定字符串。它们具有微妙的行为(实习、应用程序域重用、在其他位置的不可预测的使用),使它们不适合这样做。如果你想要每个键锁定,创建一个键(字符串)的字典(或类似的;Hashtable 具有更好的线程语义,但不是通用的)来锁定对象(也许只是 new object ()).

关于c# - 锁定 String.Format(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23008128/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com