- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我定义了三个数据结构,其中 S
、LL
、M
和 Object
,分别代表Set
、ListLike
、Map
、ByteString
:
nouns :: IO [Object]
nouns = liftM LL.words $ B.readFile "nounlist.txt"
obj :: IO ObjectSet
obj = liftM S.fromList nouns
actions :: IO ActionMap
actions = do
n <- nouns
let l = foldl' (\z x -> (x,Sell):(x,Create):z) [] n
return $ M.fromList $
(\(x,y) -> ((x, Verb y []), Out (Verb y []) x)) <$> l
现在我有一个函数将未计算的 Set 和 Map 绑定(bind)到变量 a
和 o
。一旦它进入 query
,就会通过用户输入接受并处理一个无限循环的查询。通过查找生成适当的响应。
process :: IO ()
process = do
a <- actions
o <- obj
forever $ query "" a o
请记住,我的 map 由 300,000 多个键值对组成:在我的计算机上,调用第一个查询时,第一次评估的初始时间开销大约在 3-5 秒之间;这很好,完全可以预料。随后的所有其他调用都非常灵敏且 react 灵敏,这正是我想要的方式。然而,这只是因为我将这段代码作为一个独立的可执行文件运行,并且有幸留在 process
的 IO ()
中。如果我要将此代码(以及未列出的其余随附代码)转换为一个库,以便与 say .. 一个 Snap Framework Web 应用程序 交互,我不一定会拥有这种奢侈。基本上我想说的是:如果我要从 process
中删除 forever
,那么评估的 Map 和 Set 肯定会被垃圾收集。事实上,当我从 Snap 应用程序调用该函数时会发生这种情况(我不能保持 forever
因为它会阻止 Snap 应用程序)。来自 Snap 应用程序的每个后续调用都会有相同的 3-5 秒开销,因为它会重新评估有问题的数据结构。
有没有一种简单的方法可以将 Map 和 Set 保存在内存中,以便每次后续查找都很快?我想出的一个想法是运行一个线程,该线程休眠并维护 Map 和 Set 的存储。然而,这对我来说绝对是矫枉过正。我忽略了什么?感谢您忍受我冗长的解释。
注意:我不一定要寻找代码答案、更多建议、忠告等。
最佳答案
您只能在 snaplet 初始化期间评估 obj
和 actions
一次并将结果存储在 snaplet 的状态中。
data SnapApp = SnapApp
{ objectSet :: ObjectSet
, actionMap :: ActionMap
}
appInit :: SnapletInit SnapApp SnapApp
appInit = makeSnaplet ... $ do
...
a <- liftIO actions
o <- liftIO obj
return $ SnapApp o a
现在您可以从 snap 的 Handler
访问它们:
someUrlHandler :: Handler SnapApp SnapApp
someUrlHandler = do
a <- gets actionMap
o <- gets objectMap
res <- query a o
...
这保证了 actions
和 obj
只会被评估一次。
关于multithreading - "Holding"内存中的数据映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22886845/
当使用 Balanced Payments ruby gem (https://github.com/balanced/balanced-ruby) 并在 Balanced 上使用 Balance
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 1年前关闭。 Improve th
我无法启动 Hbase Master,因为我收到此错误: [Thread-18] master.HMaster: hbase:meta,,1.1588230740 is NOT online;
我定义了三个数据结构,其中 S、LL、M 和 Object,分别代表Set、ListLike、Map、ByteString: nouns :: IO [Object] nouns = liftM LL
我目前的代码有一个问题,即无法保持对特定项目行的关注。我创建了 int focusReference 来跟踪当前聚焦的行,但它似乎每隔几秒就会重置为 0,即一旦用户选择了一行,几秒钟后,它“忘记”用户
我有这段 Python 代码: from pylab import * from numpy import * time=linspace(-pi,pi,10000) ycos=cos(time) y
在 Python 的 matplotlib 中是否有明确的等效命令用于 Matlab 的 hold on?我正在尝试将我所有的图表绘制在同一个轴上。一些图表是在 for 循环内生成的,这些图表是与 s
在 vb.net 工作多年后,我刚刚开始深入研究 php。 我想编写一个记录器类,在我的网络应用程序上作为单例运行,代码如下: class cLog{ private $data = NULL; st
不知道如何表达标题。 我有一些“太空入侵者”类型游戏的代码。我只是做了一些调整才完成了整个事情。为了拍摄,我使用空格键。问题是我无法按住空格键并且它会不断射击。我宁愿必须多次按下它(如果我按住它...
我需要将“保留”最初阻止。当队列中有座席连接到 Hold 时,再解除阻塞。 我尝试了两种方法:方式1:使用属性中的选择将其设置为最初阻止,然后我在“操作”中写入: if(queue.size() >
我正在使用 AnyLogic 进行模拟。 我想检查每个队列(队列1到10)是否包含代理。 如果包含,则解除阻塞链接到队列的保留,如果不包含,则保持阻塞。 我正在使用 LinkedList 来访问每个队
我不知道如何开始,我想在按住触摸时左右移动我的角色。 就像在这个游戏中: Example Game - Stairs from Ketchapp 我只有检测屏幕左侧或右侧空间的脚本。 public f
场景: public class MyApplication extends Application{...} 三个 Activity ,概述,列表和 map , 显示相同的数据,只是提供不同的 UI
由于某些原因,我正在寻找定义addEventListener 的源对象。从 XMLHttpRequest 开始,我发现了以下内容: > Object.prototype.hasOwnProperty(
可重入锁 ( https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/ReentrantLock.html ) 具有一
使用interactjs ,有什么办法可以控制drag vhold的灵敏度吗?在 PC 上,使用鼠标触发保持事件非常容易。在 iPad/iPhone 上,屏幕灵敏度(主要是手指压力的变化)使得很难获得
我正在用 C++ 制作游戏机,但遇到了问题。当我按下 SPACE 时,我游戏中的汽车会跳起来。当我按住键盘时,我的车会跳很多次。我想:当我按住 SPACE 键盘时,我的车只跳一次。 如何做到这一点?
如果我尝试用对数轴绘制多个图,对数刻度将被禁用。如果我删除 hold on,则会启用对数刻度,但我只能绘制一个图。 figure(1); clf x = linspace(0,1,100); y =
我正在开发一个 JavaFX 项目,我需要类似于 TouchEvent 的东西,它表征了一个“按下并保持”事件。但它应该映射为 MouseEvent,因为我在 Linux 上遇到触摸事件问题。例如,在
我想做的是:当用户按下取消按钮,或通过链接或菜单选项离开页面时,我检查是否有未保存的更改。如果是这样,我会询问用户是否要保存。我无法使用 javascript 确认窗口执行此操作,因为有时我有两个以上
我是一名优秀的程序员,十分优秀!