从专业人员到超级专业人员的任何问题 - 1。 - 页 27 1...202122232425262728293031323334...45 新评论 Vadim Zhunko 2011.09.09 14:59 #261 sergeev: 这个问题涉及内存映射 的工作。 是否有可能动态地改变分配的内存(CreateFileMapping)及其投影(MapViewOfFile)的大小,而不借助于复制和重新创建? 就是说,问题是这样的。 在内存中创建一个CreateFileMapping对象,以便在100字节的进程(写者-读者)之间交换数据。和同样大小的100字节的MapViewOfFile。 第一个进程的写入过程可以将所有100字节的数据写入内存中,而第二个读取过程无法设法清理。 因此,挑战在于,是否有办法在不重新创建CreateFileMapping / MapViewOfFile的情况下扩大分配的内存大小? 这样,第一个进程就不会等待释放,而是继续向增加的大小写入,而第二个进程也将继续进一步读取。 你可以。但最好是一次性多分配一些。它的工作速度会更快。我在同一个库中实现了它。 TheXpert 2011.09.09 15:11 #262 Zhunko: 是的,你可以。但最好一次分配更大的尺寸。 。 呃,这有点名不副实。 映射根本没有大小,只是在创建时指定了最大尺寸,通常(默认)等于我们正在处理的文件的大小。 视图的大小是在创建时设置的,只有在萨满教有访问标志的情况下,才可以在没有UnmapViewOfFile函数的情况下改变它,甚至可能不可能。 而且为什么要改变尺寸呢? --- 2011.09.09 15:20 #263 Zhunko: 是的,我们可以。 如何?不要把我送到MSDN和谷歌,我已经在那里呆了半天了。 TheXpert: 呃,这有点名不副实。映射根本没有大小,只是在创建时指定了一个最大的大小,通常(默认)等于你正在处理的文件的大小。这就是重点。我写的是在创建时指定大小=100字节。 其次,我不是在与物理文件打交道,只是与内存打交道。一个进程将信息传递给另一个进程。而且为什么要改变尺寸呢? 在操作过程中,分配的内存 被填满了100字节。但新的数据出现了,因此我们必须添加它们。所以我们必须扩大这个规模来增加它们。这就是我问的原因--如何在不进行中间复制和重新创建的情况下扩大我所分配的100字节。我用视图得到了它,我只需要重新创建它。但CreateFileMapping对象本身呢? 能否在不关闭它的情况下将其展开? Андрей 2011.09.09 15:30 #264 显然,在 "创建 "中,映射大小被设置为固定大小。 。 你可能只能重新创建。 。 但是:如果你创建了一个巨大尺寸的稀疏文件(例如2GB), ,它将是确定的。但文件的结尾 必须在系统文件大小之外理解。 。 但这样一来,人们就已经要问如何同步从文件中读取的过程了-- ,即如何知道数据的哪一部分被写入,在哪里写入。 --- 2011.09.09 15:36 #265 主要来说,不需要这样的量。 进程只是异步地写/读。 而我们需要一种方法,在读者等待所有数据被写入时,写者不会不高兴。 也就是说,你需要像ArrayResize 这样的东西来扩展数组而不改变其内容。一旦阅读器抓取了所有的数据,整个内存就可以从头再写。 --- 2011.09.09 15:36 #266 jartmailru: 但是,你必须问如何同步从文件中读取的过程------。 即如何知道数据的哪一部分被写入了,在哪里。 我一下子就解决了这个问题。 但还没有动态调整大小的功能 :( 如果瓦迪姆(Zhunko)如此慷慨,我希望他能告诉我应该使用哪些功能...... Андрей 2011.09.09 15:54 #267 我再说一遍:有这样一种东西,即稀疏文件...... 这意味着一个2G的文件在磁盘上占用0个字节。 嗯,你不能把文件设置为最大尺寸吗? 要传输的数据的数量? --- 2011.09.09 16:05 #268 jartmailru: 我再说一遍:有一种东西叫 "稀疏文件"...。 这意味着一个2G的文件在磁盘上占用0个字节。 我不使用文件,一切都通过内存完成。 我已经在上面写了三遍。 // 如果它更容易 CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, FILE_SIZE, "Local/page")。 我在这个FILE_SIZE上遇到了麻烦。 嗯,你不能将文件设置为要传输的数据的最大尺寸? 的数据量是事先不知道的。 我正在阅读关于Sparse的文章,如果它们能够动态地扩展,可能会很有用。 TheXpert 2011.09.09 16:11 #269 sergeev: 这就是问题的关键。 我告诉你,大小被设置为100字节。 第二,我不是在处理一个物理文件,只是在处理内存。一个进程向另一个进程传递信息。 有什么区别?其本质是一样的;只是信息被写入内存而不是磁盘。同样的,我们是在用一个通过CreateFile打开的句柄工作。 在那里(在内存中创建文件时),有必要指定可能的最大尺寸,超过这个尺寸就没有信息了。 当你工作时,分配的内存会填满100字节。 那么问题出在哪里呢?又做了一个偏移量为100字节的视图,但映射(即文件)的大小应事先考虑到这一点。 我得到了它,有风景。但是CreateFileMapping对象本身呢? 可以在不关闭它的情况下将其展开吗? 扩大它是错误的,它的尺寸应该已经考虑到了这一点。 --- 2011.09.09 16:23 #270 TheXpert: 扩大它是错误的,它的尺寸应该已经考虑到了这一点。 这似乎是唯一的选择。 1...202122232425262728293031323334...45 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这个问题涉及内存映射 的工作。
是否有可能动态地改变分配的内存(CreateFileMapping)及其投影(MapViewOfFile)的大小,而不借助于复制和重新创建?
就是说,问题是这样的。
在内存中创建一个CreateFileMapping对象,以便在100字节的进程(写者-读者)之间交换数据。和同样大小的100字节的MapViewOfFile。
第一个进程的写入过程可以将所有100字节的数据写入内存中,而第二个读取过程无法设法清理。
因此,挑战在于,是否有办法在不重新创建CreateFileMapping / MapViewOfFile的情况下扩大分配的内存大小?
这样,第一个进程就不会等待释放,而是继续向增加的大小写入,而第二个进程也将继续进一步读取。
是的,你可以。但最好一次分配更大的尺寸。 。
呃,这有点名不副实。
映射根本没有大小,只是在创建时指定了最大尺寸,通常(默认)等于我们正在处理的文件的大小。
视图的大小是在创建时设置的,只有在萨满教有访问标志的情况下,才可以在没有UnmapViewOfFile函数的情况下改变它,甚至可能不可能。
而且为什么要改变尺寸呢?
是的,我们可以。
呃,这有点名不副实。
映射根本没有大小,只是在创建时指定了一个最大的大小,通常(默认)等于你正在处理的文件的大小。
这就是重点。我写的是在创建时指定大小=100字节。
其次,我不是在与物理文件打交道,只是与内存打交道。一个进程将信息传递给另一个进程。
而且为什么要改变尺寸呢?
在操作过程中,分配的内存 被填满了100字节。但新的数据出现了,因此我们必须添加它们。所以我们必须扩大这个规模来增加它们。
这就是我问的原因--如何在不进行中间复制和重新创建的情况下扩大我所分配的100字节。
我用视图得到了它,我只需要重新创建它。但CreateFileMapping对象本身呢? 能否在不关闭它的情况下将其展开?
。
你可能只能重新创建。
。
但是:如果你创建了一个巨大尺寸的稀疏文件(例如2GB),
,它将是确定的。但文件的结尾 必须在系统文件大小之外理解。
。
但这样一来,人们就已经要问如何同步从文件中读取的过程了--
,即如何知道数据的哪一部分被写入,在哪里写入。
主要来说,不需要这样的量。
进程只是异步地写/读。 而我们需要一种方法,在读者等待所有数据被写入时,写者不会不高兴。
也就是说,你需要像ArrayResize 这样的东西来扩展数组而不改变其内容。一旦阅读器抓取了所有的数据,整个内存就可以从头再写。
但是,你必须问如何同步从文件中读取的过程------。
即如何知道数据的哪一部分被写入了,在哪里。
我一下子就解决了这个问题。
但还没有动态调整大小的功能 :(
如果瓦迪姆(Zhunko)如此慷慨,我希望他能告诉我应该使用哪些功能......这意味着一个2G的文件在磁盘上占用0个字节。
嗯,你不能把文件设置为最大尺寸吗?
要传输的数据的数量?
我再说一遍:有一种东西叫 "稀疏文件"...。
这意味着一个2G的文件在磁盘上占用0个字节。
我不使用文件,一切都通过内存完成。 我已经在上面写了三遍。
// 如果它更容易
CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, FILE_SIZE, "Local/page")。
我在这个FILE_SIZE上遇到了麻烦。
我正在阅读关于Sparse的文章,如果它们能够动态地扩展,可能会很有用。
这就是问题的关键。 我告诉你,大小被设置为100字节。
第二,我不是在处理一个物理文件,只是在处理内存。一个进程向另一个进程传递信息。
有什么区别?其本质是一样的;只是信息被写入内存而不是磁盘。同样的,我们是在用一个通过CreateFile打开的句柄工作。
在那里(在内存中创建文件时),有必要指定可能的最大尺寸,超过这个尺寸就没有信息了。
当你工作时,分配的内存会填满100字节。
那么问题出在哪里呢?又做了一个偏移量为100字节的视图,但映射(即文件)的大小应事先考虑到这一点。
我得到了它,有风景。但是CreateFileMapping对象本身呢? 可以在不关闭它的情况下将其展开吗?
扩大它是错误的,它的尺寸应该已经考虑到了这一点。