Makale numarası: 125713 - Son Gözden Geçirme: 21 Kasım 2006 Salı - Gözden geçirme: 3.1 Ortak dosya sorunları ve Platform değişiklikleri eşleme
Bu SayfadaÖzetBu makalede, bazı dosya eşleme kullanırken sık karşılaşılan sorunlar giderir. Çıkış dosyası eşleme uygulaması platformu bazı farklılıklar da gösterir. Bu makalede, dosya eşlemesi gerçekleştirmek için bu yordamlar açıklanmaz. Dosya eşleme kullanma hakkında daha fazla bilgi için lütfen Microsoft Win32 Programcı Başvurusu dosya eşleme özete bakın. Ayrıca bkz: "CreateFileMapping() OpenFileMapping(), MapViewOfFile(), MapViewOfFileEx(), UnmapViewOfFile() ve FlushViewOfFile() açıklamalarını.. Daha fazla bilgiAd boşluğu çakışmasıAynı ada sahip iki farklı nesne türlerini mümkün değildir; bu nedenle olay semafor, mutex ve dosya eşleme nesnelerin adlarını aynı ad boşluğunu paylaşır. Dosyayı oluşturmak veya başka türde bir nesne tarafından zaten kullanılmakta olan bir adı kullanarak bir türü olan bir nesneyi açma girişiminde bir hatadır.Bunlar, başka türde bir nesne tarafından kullanılmakta olan bir nesne adı belirtirseniz, CreateFileMapping() ve OpenFileMapping() başarısız olur. Her iki durumda da, GetLastError() ERROR_INVALID_HANDLE (6) döndürecektir. Nesne türleri arasındaki çakışmaları önlemek için <a0></a0>, bir nesne türü adı eklemek için çözümüdür. Örneğin, "EV_myapp_block_ready" nesne adı eşleştirmek için bir dosya için bir olay ve nesne adı ve "FM_myapp_missile_data" kullanın. Eşleşen bir dosya, tüm görünümler Unmapping, necessityWindows, bu nesnenin, her görünüm için dosya eşleme nesnesi için dahili bir tanıtıcı MapViewOfFile() veya MapViewOfFileEx() tarafından oluşturulmuş olup olmadığını korur. Bu bir iç tanıtıcı, ayrıca CreateFileMapping() tarafından döndürülen bir tanıtıcıya tutulur. Tanıtıcı ile ilişkilendirilmiş görünümü tarafından arama UnmapViewOfFile() unmapped kadar iç tanıtıcı kapalı. Tam bir dosyayı kapatmak için iç tanıtıcıları dahil nesne için tüm tanıtıcıları kapatılması eşleştirme nesnesi gerektirir. Bu nedenle, bir <a0>Dosya</a0> eşleme nesnesini kapatmak için <a0></a0>, bu nesnenin tüm görünümlerde bağlanılmayan olmalıdır ve CreateFileMapping() tarafından döndürülen tanıtıcı kapatıldı.Dosya eşleme nesnesinin extant bağlanılmayan görünümler bir CloseHandle() başarısız nesne tanıtıcısı neden olacak DEĞIL. Kendi nesne tanıtıcısı başarıyla kapatıldı, bu nedenle, dosya eşleme nesnesi değil mutlaka boşaltıldıktan başka bir deyişle, gerekmeyen tüm görünümlerde, bağlanılmayan olan doğru değildir. Başarısızlık düzgün nesnesinin tüm görünümlerde unmap ve nesne tanıtıcısı'ı kapatmak için sızıntıları uygulamanın disk belleği olan havuz, diske alınamayan havuz, sanal bayt sayısını ve ayrıca sistem geniş kaydedilmiş bayt neden olur. Eşleme nesnelerin boyutu sınırlamalarıSistem disk belleği dosyası tarafından yedeklenen dosya eşleme nesnesinin boyutunu kullanılabilir sistem sanal bellek, VirtualAlloc()) çağrısı kaydedilmiş, bellek miktarını (anlamına gelir. sınırlıdırWindows NT'DE bir adlandırılmış bir disk dosyası tarafından yedeklenen dosya eşleme nesnesinin boyutunu, kullanılabilir disk alanıyla sınırlandırılır. Eşlenmiş bir görünüm nesnenin boyutu, en büyük bitişik ayrılmamış sanal bellek (en fazla 2 GB zaten işlem tarafından ayrılan sanal bellek eksi) eşleme işlemi işlemindeki öbeğini sınırlıdır. Win32 sistemlerde, bir adlandırılmış bir disk dosyası tarafından yedeklenen dosya eşleme nesnesinin boyutunu kullanılabilir sistem sanal belleği, sanal bellek yönetimi uygulaması Win32 yüzünden sınırlıdır. Win32s, eşlenmiş bölüm büyük dosyalar eşleştirmek için kullanmak için çok küçük halde takas alanı gerekli değildir ve Windows tarafından VM ayarlamak, bellek normal sanal bellek ayırır. Ile Windows NT gibi kullanılabilir disk alanını da bir sınırlama getirdiğine. Windows 95'te, kullanılabilir disk alanı bir adlandırılmış bir disk dosyasına yedeklenen dosya eşleme nesnesinin boyutunu sınırlıdır. Eşlenmiş bir görünüm nesnenin boyutu, en büyük bitişik paylaşılan olan sanal sahası ayrılmamış sanal bellek bloğu sınırlıdır. Bu, Windows 95'in (16-bit Windows tabanlı uygulamalar gibi) bir paylaşılan sanal sahası kullanan diğer bileşenler tarafından kullanılan herhangi bir bellek eksi 1 GB, en fazla olacaktır. Örtüşmeyen tüm eşlenen görünümler sistemde çalışan tüm uygulamalar için toplam boyutu bu sınırı uygulanır, böylece her eşlenmiş görünüm bu sahası bellek kullanır. Eşlenen dosya May Not otomatik olarak artmış olabilir.Boyut için bir dosya eşleme nesnesi yedeklediyseniz adlandırılmış bir disketi tarafından bir ça?r? CreateFileMapping() dosyasında eşleme yedeklemek için kullanılan dosya boyutundan büyük, dosya genellikle CreateFileMapping() çağrı tarafından belirtilen boyuta büyütülmesi olacaktır.PAGE_WRITECOPY fdwProtect parametresi belirtilirse, yalnızca Windows NT üzerinde dosya otomatik olarak artmış değil. Bu CreateFileMapping() başarısız olmasına neden olur ve GetLastError() ERROR_NOT_ENOUGH_MEMORY (8) döndürecektir. CreateFileMapping() çağırmadan önce dosyanın boyutunu ayarlamak için <a0></a0>, SetFilePointer() ve SetEndOfFile() kullanın. MapViewOfFileEx() ve lpvBase geçerli aralığıWindows NT'DE, 0-2 adres aralığındaki dosya eşleşme nesnelerini görünümlerini eşleştirilir GB. Bir adresi bu aralık dışında geçirmeden lpvBase MapViewOfFileEx() parametresi başarısız olmasına neden olur ve GetLastError() ERROR_INVALID_PARAMETER (87) döndürecektir.Windows 95'te, dosya eşleşme nesnelerini görünümlerini (paylaşılan sanal sahası) 2-3 GB adres aralığındaki eşleştirilir. Bir adresi bu aralık dışında geçirmeden MapViewOfFileEx() başarısız olmasına neden olur ve GetLastError() ERROR_INVALID_ADDRESS (487) döndürecektir. Gelecekteki güncelleştirmelerin Windows 95 için eşleme aralığı 0-2'ye değişebilir Not GB, Windows NT gibi. MapViewOfFileEx() ve lpvBase tahsisat durumuBir adres MapViewOfFileEx() lpvBase parametresi için belirtilen ve ayrılmamış sanal adres alanı bayt cbMap parametresinde belirtilen karşılamak için yeterince büyük bu adresteki öbeğini değil, MapViewOfFileEx() başarısız olur ve GetLastError() ERROR_NOT_ENOUGH_MEMORY (8) döndürecektir. Bu, sistem belleğinin yetersiz olduğunu veya işlemin daha fazla bellek ayrılamıyor gelmez. Bu, yalnızca istenen sanal adres aralığı zaten bu işlemde rezerve edilmiş anlamına gelir.Arama MapViewOfFileEx() önce VirtualQuery() ayrılmamış sanal adres alanı için uygun bir aralığı belirlemek için kullanılır. MapViewOfFileEx() ve lpvBase, parçalı yapıBelirtilen bir ça?r? MapViewOfFileEx() lpvBase parametresi için bir katı sistemin tahsisat parçalı yapı kullanmanız gerekir. Windows NT'DE bir değer belirterek MapViewOfFileEx() başarısızlık ve GetLastError() ERROR_MAPPED_ALIGNMENT dönmek için neden olur (1132). Windows 95'te, adres sistemin tahsisat parçalı yapı tam sayı en yakın katına yuvarlanır.Sistemin tahsisat parçalı yapı belirlemek için <a0></a0>, GetSystemInfo() arayın. Eşleşen görünümler adresleriBir dosyayı (veya paylaşılan bellek) genel bir görünümünü eşlenirken, ya da işletim sistemi görünümü adresini belirlemek, veya MapViewOfFileEx() işlevi lpvBase parametresi olarak bir adresi belirtmek üzere olanaklıdır. Birden çok işlem arasında paylaşılan dosya eşleştirmesini gittiği, MapViewOfFile() kullanın ve adres eşleştirmesi için seçtiğiniz işletim sistemi için önerilen yöntem olur. Bunu yapmak için iyi bir nedeni vardır:
Görünümler, Windows NT altında farklı adreslere eşlenen, ortaya çıkan zorluk eşleme kendi içinde eşleme işaretçiler depolama olur. Başka bir işlem eşlemesindeki içinde aynı konuma bir işaretçi bir işlemdeki göstermiyor olmasıdır. Bu sorunu çözmek için <a0></a0>, işaretçileri yerine uzaklıklar oturumunda depolamak ve gerçek adresleri her işlemdeki kaydırma için temel adresi eşleme ekleyerek hesaplar. Bunun için kullanılan temel işaretçiler bırakılabilen öğelerdir ve böylece temel gerçekleştirmek + dönüştürme örtülü olarak mahsup. Kısa BIR SDK örnek BPOINTER adı verilen bu teknik gösterilmiştir. Ek bir platform farklarGerçekleştirirken, ek sınırlamalar eşleme, Windows 95 altında dosya:
Bu makaledeki bilginin uygulandığı durum:
Otomatik TercümeÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir. Makalenin İngilizcesi aşağıdaki gibidir:125713
(http://support.microsoft.com/kb/125713/en-us/
)
| Diğer Kaynaklar Diğer Destek Siteleri
ToplulukMakale çevirileri |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Üste