后台服务应用程序可以由两个应用程序访问(Background Service application can be accessed by two applications)
我可以使用Windows手机创建后台服务应用程序可以在同一设备上的其他两个应用程序访问吗?
概念两个应用程序与“后台服务”应用程序通信
谢谢
Can I create with Windows phone a Background Service application can be accessed by two other applications on the same device ?
Concept two applications communicate with a "background service" application
thanks
原文:https://stackoverflow.com/questions/34181373
最满意答案
如果文件映射由实际文件而不是内存块支持,则可以通过以下两种方式之一调整文件大小:
1)调用
CreateFileMapping()
,其大小超过当前文件大小。 将调整文件大小以匹配新映射。2)使用
SetFilePointer()
和SetEndOfFile()
直接调整文件大小,然后使用新大小调用CreateFileMapping()
。
CreateFileMapping()
的文档中描述了这两个条件。If the file mapping is backed by an actual file and not a block of memory, then you can resize the file in one of two ways:
1) call
CreateFileMapping()
with a size that exceeds the current file size. The file will be resized to match the new mapping.2) use
SetFilePointer()
andSetEndOfFile()
to resize the file directly, then callCreateFileMapping()
with the new size.Both conditions are described in the documentation for
CreateFileMapping()
.
相关问答
更多-
何时使用内存映射文件?(When to use memory-mapped files?)[2023-05-21]
内存映射文件对于需要重复访问相对较大的文件的相对较小部分(视图)的场景是有益的。 在这种情况下,操作系统可以通过仅映射和传出映射文件的最近使用的部分来帮助优化应用程序的整体内存使用和分页行为。 此外,内存映射文件可以显示有趣的功能,如写时复制或作为共享内存的基础。 对于您的方案,内存映射文件可以帮助您组装文件,如果这些块到达不正确。 但是,您仍然需要提前知道最终的文件大小。 此外,您应该只访问一次文件,以便编写一个块。 因此,超过明确实现的异步I / O的性能优势是不太可能的,但是可以更容易和更快地实现文件 ... -
内存映射文件一次将数据从磁盘复制到内存中。 未使用的页面可以自由交换,与任何其他虚拟内存相同,除非已使用mlock(2)将其连接到物理内存中mlock(2) 。 内存映射将确定从磁盘复制到内存以及何时到操作系统。 从基础级别到BSD级别使用mmap不太可能产生很大的区别,除了必须与其他基础代码接口的代码更加尴尬。 Memory-mapped files copy data from disk into memory a page at a time. Unused pages are free to be ...
-
我认为优点是真正减少了传统的阅读文件方式所需的数据复制量。 如果您的应用程序可以在内存映射文件中使用数据“就位”,它可以进入而不被复制; 如果您使用系统调用(例如Linux的pread()),那通常涉及内核将数据从其自己的缓冲区复制到用户空间中。 这种额外的复制不仅需要时间,而且可以通过访问这些额外的数据副本来降低CPU缓存的有效性。 如果数据实际上必须从光盘读取(如在物理I / O中),则操作系统仍然必须读取它们,页面错误可能不比系统调用更好的性能,但如果它们不要(即已经在OS缓存中),性能在理论上应该好 ...
-
您可以从字节缓冲区和计数中创建一个CFData() 。 鉴于此,你应该能够mmap()有问题的文件,然后将映射的字节缓冲区传递给CFDataCreateWithBytesNoCopy() 。 唯一真正的复杂是你需要使用知道如何将munmap()作为bytesDeallocator 。 You can create a CFData() from a byte buffer and a count. Given this, you should just be able to mmap() the file ...
-
是的,它确实。 它甚至支持在CDFS或网络驱动器上映射文件。 你怀疑的根源是什么? Yes it does. It even supports mapping of files on CDFS or on network drives. What is the source of your doubts?
-
因此,根据对象的大小,您可以将它们存储在哈希映射中,该映射保留LRU列表并开始将对象驱逐到文件,同时在地图中保持键和文件偏移。 这样,当你确实需要从磁盘中取回它时,它是一个搜索和读取以获取对象。 如果你想要预先分配固定大小的文件,你可以mmap它们,你的偏移将成为另一个指针。 这简化了Riak数据库初始存储的工作方式,他们在网站上有一些设计文档[1] [2]。 这只有在你的对象大于键的情况下才能正常工作,这样所有键都可以很容易地放在内存中,但对象却不能。 Cassandra数据库使用与“密钥缓存”类似的技术 ...
-
一个问题是程序的逻辑顺序不正确。 此行为CUDA API提供的data分配值: err = cudaHostAlloc((void**)&data, data_file_size, cudaHostAllocMapped); 然后该行用新的值覆盖该值: data = (uint32_t*) mmap(0, data_file_size, PROT_READ, MAP_PRIVATE, data_file, 0); 此时,CUDA API无法将data值识别为固定内存空间,因此当您调用此数据时: err ...
-
如果您发现使用内存映射文件的进程持有很多这些页面,那么这意味着操作系统不需要丢弃任何内存映射区域以提供给其他进程。 那么,您如何知道其他进程实际上需要当前用于映射文件的内存? 仅仅因为操作系统物理RAM较低就没有任何意义。 其他进程必须要求内存使操作系统删除映射的页面并为它们提供RAM。 因此,您的mmap-I / O进程似乎正在使您的其他进程不再使用RAM。 一种方法是明智地锁定正在饥饿的进程中的内存。 查看VirtualLock for win32。 Ended up using brute force ...
-
如果文件映射由实际文件而不是内存块支持,则可以通过以下两种方式之一调整文件大小: 1)调用CreateFileMapping() ,其大小超过当前文件大小。 将调整文件大小以匹配新映射。 2)使用SetFilePointer()和SetEndOfFile()直接调整文件大小,然后使用新大小调用CreateFileMapping() 。 CreateFileMapping()的文档中描述了这两个条件。 If the file mapping is backed by an actual file and no ...
-
C中的内存映射文件(memory-mapped files in C)[2022-03-20]
神奇的词是“图书馆介入”。 这是一个很好的教程: http : //developers.sun.com/solaris/articles/lib_interposers.html 当Oracle购买sun时,许多文章似乎已经消失,并且/或者无法通过Oracle网站访问。 以下是目前可用的一些链接: 这是2001年发表的原始文章: 为乐趣和利润建立图书馆插入者 (Dobbs博士) developers.sun.com链接是原作者的转贴,可能与2001年的文章有所不同; 这是重新发布: 使用库中介器进行调试和 ...