Vb.net 想要缓存吗

Vb.net 想要缓存吗,vb.net,caching,memoization,Vb.net,Caching,Memoization,这是我遇到的问题的代码。这很简单,但我还在学习。 我希望缓存结果,以便函数返回的速度比当前快几秒钟。此时,它将在4中返回给调用方,而此时它应该是2 Sub Main console.writeline(getmyresult(2)) 'takes a while' console.writeline(getmyresult(3)) 'takes a while' console.writeline(getmyresult(2)) 'Should be instant'

这是我遇到的问题的代码。这很简单,但我还在学习。 我希望缓存结果,以便函数返回的速度比当前快几秒钟。此时,它将在4中返回给调用方,而此时它应该是2

Sub Main
    console.writeline(getmyresult(2)) 'takes a while'
    console.writeline(getmyresult(3)) 'takes a while'
    console.writeline(getmyresult(2)) 'Should be instant'
    console.writeline(getMyresult(3)) 'Should be instant'
End Sub


function getMyresult(X as interger) as integer
    dim Y as integer=LongCompute(X)
    return Y
end function


function LongCompute(X as integer) as integer
    system.threading.thread.sleep(1000)
    return x^2
end function

任何帮助都将不胜感激。

简单的选择是使用Dictionary对象,然后检查是否为传递到getmyresult的参数设置了键。如果有,则传递存储在字典中的值,如果没有处理结果,则将其添加到字典中,然后返回结果。第二个调用几乎是瞬时的,因为它已经缓存在字典中。

简单的选项是使用字典对象,然后检查是否为传递到getmyresult的参数设置了键。如果有,则传递存储在字典中的值,如果没有处理结果,则将其添加到字典中,然后返回结果。第二次调用几乎是即时的,因为它已缓存在字典中。

是的,这称为备忘录化

你可以在这里阅读:

visual basic中的一个简单实现如下所示:

Dim dict As New Dictionary(Of Integer, Integer)

Sub Main()
    console.writeline(getmyresult(2)) 'takes a while'
    console.writeline(getmyresult(3)) 'takes a while'
    console.writeline(getmyresult(2)) 'Should be instant'
    console.writeline(getMyresult(3)) 'Should be instant'
End Sub

Function getMyresult(ByVal X As Integer) As Integer
    If dict.ContainsKey(X) Then
        Return dict(X)
    Else
        Dim temp = LongCompute(X)
        dict.Add(X, temp)
        Return temp
    End If
End Function

Function LongCompute(ByVal X As Integer) As Integer
    System.Threading.Thread.Sleep(1000)
    Return x ^ 2
End Function

是的,这叫做备忘录化

你可以在这里阅读:

visual basic中的一个简单实现如下所示:

Dim dict As New Dictionary(Of Integer, Integer)

Sub Main()
    console.writeline(getmyresult(2)) 'takes a while'
    console.writeline(getmyresult(3)) 'takes a while'
    console.writeline(getmyresult(2)) 'Should be instant'
    console.writeline(getMyresult(3)) 'Should be instant'
End Sub

Function getMyresult(ByVal X As Integer) As Integer
    If dict.ContainsKey(X) Then
        Return dict(X)
    Else
        Dim temp = LongCompute(X)
        dict.Add(X, temp)
        Return temp
    End If
End Function

Function LongCompute(ByVal X As Integer) As Integer
    System.Threading.Thread.Sleep(1000)
    Return x ^ 2
End Function

对于一个简单的练习,你可以像詹姆斯·卡尔肖建议的那样将结果输入字典。键是输入,值是缓存的结果

如果这是认真的工作,我宁愿考虑使用<代码>系统.RunTime.cache。字典的问题在于,条目永远不会从字典中流出(在某种程度上,它们会泄漏,尽管如果输入域是有界的,也没那么糟糕)。生产就绪缓存将处理内存压力或支持项目过期(例如,将结果缓存10分钟)。这些需求由

MemoryCache
处理


缓存没有副作用且仅依赖于其输入的函数的结果在形式上称为记忆化。编程练习的一个很好的扩展是编写一个通用的记忆函数,它可以封装任何常规(慢速)函数。例如,
FastCompute=Memoize(SlowCompute)

正如詹姆斯·库肖所建议的,对于一个简单的练习,你可以将结果放入字典中。键是输入,值是缓存的结果

如果这是认真的工作,我宁愿考虑使用<代码>系统.RunTime.cache。字典的问题在于,条目永远不会从字典中流出(在某种程度上,它们会泄漏,尽管如果输入域是有界的,也没那么糟糕)。生产就绪缓存将处理内存压力或支持项目过期(例如,将结果缓存10分钟)。这些需求由

MemoryCache
处理


缓存没有副作用且仅依赖于其输入的函数的结果在形式上称为记忆化。编程练习的一个很好的扩展是编写一个通用的记忆函数,它可以封装任何常规(慢速)函数。例如,
FastCompute=Memoize(SlowCompute)

到目前为止,您尝试了什么?你已经向我们展示了你想做什么,但没有告诉我们问题出在哪里。@Chris我一直在努力做任何事情,我被告知要用字典来创建它,但我不知道该怎么做。到目前为止,你做了什么?你向我们展示了你想做什么,但没有告诉我们问题是什么。@Chris我一直在努力尝试做任何事情,我被告知要用字典来创建它,但我对如何做一无所知除了基础知识之外,还有一些好的建议。谢谢@jods感谢老兄,我也将在我的课程作业中单独使用这个,因为它将显示基本答案和专业答案。谢谢你,好心的先生!!!好的建议超出了基础。谢谢@jods感谢老兄,我也将在我的课程作业中单独使用这个,因为它将显示基本答案和专业答案。谢谢你,好心的先生!!!不知道它有一个特定的名字-每天学习一些有用的东西;-)@Paul_R谢谢你我会仔细阅读的谢谢你的回答但如果我不明白的话就没用了谢谢你不知道它有一个特定的名字-每天学习一些有用的东西;-)@保罗:谢谢你,我会仔细阅读的,谢谢你的回答,但是如果我不明白,那就没用了,再次谢谢你