處理將使用內存映射文件進行某些內部(或內部?)應用程序通信的應用程序,並且我想確保何時隨機生成內存映射的內存文件,我不會無意中產生或得到一個已經存在的副本(當行星對齊時會發生這種情況的極罕見情況)。任何想法如何防止呢? System.IO.MemoryMappedFiles似乎沒有File.Exists()方法......我想我可以嘗試OpenOrCreate()並處理任何訪問衝突等,但這會變得很快。內存映射文件 - >檢查重複的文件名
回答
無論如何,使用File.Exists()
並不是安全併發的。
要做的最好的事情是:在Guid上創建一個文件名。
希望我可以,但是一個GUID太大,無法通過SendMessage()來通知其他進程打開。目前正在考慮將部分日期時間用於唯一性,並穿過我的手指。 – user978122
@ user978122然後使用TWO SendMessage(使用不同的msg id)!另一方等待消息的「部分」。 – xanatos
正在增加程序的複雜性...和複雜性是不好的!^_^ – user978122
From: Programming Memory-Mapped Files with the .NET Framework - CodeProject.com
static void Main(string[] args)
{
string name = "NetMMFSingle";
// Create named MMF
try
{
var mmf = MemoryMappedFile.CreateNew(name, 1);
} catch
{
Console.WriteLine("Instance already running...");
return;
}
ConsoleKeyInfo key = Console.ReadKey();
// Your real code follows...
}
首先,你可以通過使用一個唯一的名稱爲您的文件,如公司名稱,或者您的應用程序的名稱,或兩者防止命名衝突。沒有其他應用程序將在文件名中包含這些內容。如果您擔心同一應用程序的兩個副本,那麼只需以「僅創建」模式打開文件,而不是創建或打開。
- 1. 內存映射庫的文件名osx
- 2. 命名內存映射文件
- 3. 內存映射文件C++
- 4. 內存映射文件.NET
- 5. Windows內存映射文件
- 6. 內存映射文件
- 7. 文件系統 - 內存映射文件
- 8. 如何檢查內存映射文件是否存在?
- 9. 內存映射文件 - 映射結構而不是文件?
- 10. 如何在WinDbg中查找內存映射文件的名稱?
- 11. 寫入內存映射文件比非內存映射文件慢
- 12. 如何檢查內存區域是否映射到文件?
- 13. 在C#中複製文件時檢查重複的文件名
- 14. C++:內存映射文件上的Fetch_add
- 15. 內存映射文件的位置
- 16. C++:帶內存映射文件的DLL
- 17. Neo4j中的內存映射文件
- 18. 內存映射文件的使用
- 19. 內存映射文件的Java NIO
- 20. 匿名映射或文件映射?
- 21. 重命名/映射Cygwin文件夾
- 22. php檢查文件名存在,重命名文件
- 23. .NET 4內存映射文件
- 24. 何時使用內存映射文件?
- 25. 鏈接增強內存映射文件
- 26. 截斷內存映射文件
- 27. 追加到內存映射文件
- 28. Java內存映射文件和交換
- 29. FILE_FLAG_DELETE_ON_CLOSE和內存映射文件
- 30. Java - 內存映射文件和刷新
它是進程間。首先你創建一個文件 - 確保它是唯一的。然後你記憶地圖。所以我不明白這個問題:http://msdn.microsoft.com/en-us/library/dd997372.aspx – dcaswell
內存映射到一個實際的文件是可選的。 – user978122