Memory 在C#中,从数据库在应用程序内存中加载键值对的最佳方法
在.net应用程序中,我们需要从数据库加载一些数据(键/值对),并在整个应用程序中使用它们。我们不希望为了一次又一次地获取值而针对每个请求(键)点击数据库。我想知道在这方面的标准和有效方法是什么 感谢所有到目前为止的回复。。我认为,在我的情况下(数据不是很大),我会将数据加载到某个静态keyvaluepair中,并在需要时使用它。我希望将其添加到业务层,这是我过度简化的结构,在基类中,我添加了一个静态构造函数并定义了keyvaluepair:Memory 在C#中,从数据库在应用程序内存中加载键值对的最佳方法,memory,load,key-value,Memory,Load,Key Value,在.net应用程序中,我们需要从数据库加载一些数据(键/值对),并在整个应用程序中使用它们。我们不希望为了一次又一次地获取值而针对每个请求(键)点击数据库。我想知道在这方面的标准和有效方法是什么 感谢所有到目前为止的回复。。我认为,在我的情况下(数据不是很大),我会将数据加载到某个静态keyvaluepair中,并在需要时使用它。我希望将其添加到业务层,这是我过度简化的结构,在基类中,我添加了一个静态构造函数并定义了keyvaluepair: class BaseClass { //dec
class BaseClass
{
//declare static keyvaluepair (kvp)
static BaseClass()
{
//load kvp from database
}
public void print(string key)
{
//use kvp to get the value for the key
}
}
class ChildA : BaseClass
{
public void somethingA()
{
//call print(key)
}
}
class ChildB : BaseClass
{
public void somethingB()
{
//call print(key)
}}
class main
{
public void GetChildA()
{
ChildA a = new ChildA();
a.somethingA();
}
public void GetChildB()
{
ChildB b = new ChildB();
b.somethingB();
}
}
我从前端调用主类中的方法。我想确保在调用a.somethingA()或b.somethingB()时,kvp最初只应加载一次。随后的调用应该只从内存中获取数据。上面的方法是正确的还是我把它弄糟了 在程序启动时将表的所有数据(如果不是太大)加载到哈希表中
然后,应用程序可以从全局/静态哈希表变量快速访问键值对。在程序启动时将表的所有数据(如果不是太大)加载到哈希表中
然后,您的应用程序可以从全局/静态哈希表变量快速访问键值对。2种方法自然出现
当然,您需要将最近请求的对保存在内存中,这样即使您实现了第一种策略,也不会对相同的值对进行连续的sql调用。2种方法自然出现
当然,您需要将最近请求的对保存在内存中,这样就不会对相同的值对进行连续的sql调用,即使您实现了第一种策略。这实际上取决于集合的大小。如果它是一个相对较小的集合,您可能希望在应用程序启动时加载它并从那里读取它。但是,如果它是一个更大的集合,或者在正常使用模式下只读取了一些键,那么编写自己的内存容器会很有帮助,它知道如何查询数据库以获取键。然后你可以做类似的事情
NodeCollection<T>["keyofitem"]
NodeCollection[“keyofitem”]
NodeCollection类将维护一个内部键/值集合,该集合将被查询以获取传递的“keyofitem”,如果它存在,则返回它;如果不存在,则执行DB查找,获取值,将其添加到内部集合并返回给调用者。这实际上取决于集合的大小。如果它是一个相对较小的集合,您可能希望在应用程序启动时加载它并从那里读取它。但是,如果它是一个更大的集合,或者在正常使用模式下只读取了一些键,那么编写自己的内存容器会很有帮助,它知道如何查询数据库以获取键。然后你可以做类似的事情
NodeCollection<T>["keyofitem"]
NodeCollection[“keyofitem”]
NodeCollection类将维护一个内部键/值集合,该集合将被查询以获取传递的“keyofitem”,如果它存在,则返回它;如果不存在,则执行DB查找,获取值,将其添加到内部集合并返回给调用者。谢谢Nikhil,我的集合相对较小。我添加了示例代码,以确认该方法是否正确?这里不需要继承。使基类为静态,方法也打印为静态。然后您可以简单地执行BaseClass.Print(键)。这是非常过分简化的。我可能还会在基类的静态构造函数中加入一些锁定机制!如果我将基类设置为静态,那么在上面的代码中,将如何以及何时填充keyvaluepair?每次我调用BaseClass.Print(键)时它都会被填充吗?谢谢Nikhil,我的收藏相对较少。我添加了示例代码,以确认该方法是否正确?这里不需要继承。使基类为静态,方法也打印为静态。然后您可以简单地执行BaseClass.Print(键)。这是非常过分简化的。我可能还会在基类的静态构造函数中加入一些锁定机制!如果我将基类设置为静态,那么在上面的代码中,将如何以及何时填充keyvaluepair?是否每次我调用BaseClass.Print(键)时都会填充它?感谢valentin提供的描述性解决方案。如果您能检查我上面的示例代码以确认方法是否正确,请不胜感激。感谢valentin提供的描述性解决方案。如果您能检查我上面的示例代码以确认该方法是否正确,将不胜感激。数据非常小,我将使用静态keyvaluepai