दिलचस्प पोस्ट
कहाँ "शुद्ध वर्चुअल फ़ंक्शन कॉल" दुर्घटनाओं से आती है? मैं अपने डिवाइज़ को क्षैतिज रूप से कैसे संरेखित कर सकता हूं? एंड्रॉइड 4.1: एप्लिकेशन के लिए नोटिफिकेशन की जांच कैसे निष्क्रिय कर दी जाती है? React.js इनलाइन शैली सर्वोत्तम प्रथाओं Microsoft.AspNet.Identity.EntityFramework.IdentityUser में आईडी का प्रकार कैसे परिवर्तित करें क्या कभी एक एंकर के भीतर एक div डाल रहा है? सी # में ज़िप फ़ोल्डर AngularJS: मैं कैसे नियंत्रकों के बीच चर पारित कर सकता हूँ? ब्लैकबेरी यूजर इंटरफेस डिजाइन – अनुकूलन यूआई? जावा को हेक्स में परिवर्तित करना और फिर से वापस करना पूर्ण स्क्रीन में कैमरा डिस्प्ले / पूर्वावलोकन पहलू अनुपात को बनाए नहीं रखता है – स्क्रीन स्क्रीन पर फिट होने के लिए छवि स्कूव, फैली हुई है गैर-एस्की वर्णों को उजागर करने के लिए विम कैसे प्राप्त करें? पुनः आरंभ करने के लिए पुनर्प्राप्ति कार्रवाई के साथ Windows सेवा स्थापित करें क्या मैं जांच सकता हूं कि कोई फ़ाइल URL पर मौजूद है या नहीं? एंड्रॉइड कस्टम कीबोर्ड बनाने के लिए कैसे?

यह सुनिश्चित करने के लिए कि सभी डेटा को भौतिक रूप से डिस्क पर लिखा गया है?

मैं समझता हूं कि .NET FileStream के फ्लश विधि केवल वर्तमान बफ़र को डिस्क पर लिखता है, लेकिन Windows 'डिस्क ड्राइवर और हार्ड डिस्क फ़र्मवेयर पर निर्भर करता है यह कोई गारंटी नहीं है कि डेटा वास्तव में डिस्क पर भौतिक रूप से लिखा गया है।

क्या मुझे यह गारंटी दे सकता है एक .NET या Win32 विधि है? इसलिए अगर इस विधि को वापस आने के बाद बिजली हानि एक नैनोसेकंड है, तो क्या मुझे अभी भी यकीन है कि सब कुछ ठीक है?

वेब के समाधान से एकत्रित समाधान "यह सुनिश्चित करने के लिए कि सभी डेटा को भौतिक रूप से डिस्क पर लिखा गया है?"

विंडोज के तहत, फ्लशफ़ाइलबफ़र्स (Win32 एपीआई) देखें।

स्टीफन एस ने कहा:

मुझे लगता है कि .NET FileStream के फ्लश विधि केवल वर्तमान बफ़र को डिस्क पर लिखते हैं

नहीं, .NET FileStream के फ्लश केवल ओएस कैश में .नेट बफ़र्स लिखता है, यह ओएस कैशे डिस्क पर फ्लश नहीं करता है। अफसोस की बात है कि इस वर्ग के एमएसडीएन डॉक्टर ने ऐसा नहीं कहा। .NET <4.0 के लिए, आपको फ्लश + Win32 के फ्लशफाइलबफ़र्स को कॉल करना होगा:

using System.Runtime.InteropServices; . . . // start of class: [DllImport("kernel32", SetLastError=true)] private static extern bool FlushFileBuffers(IntPtr handle); . . . stream.Flush(); // Flush .NET buffers to OS file cache. #pragma warning disable 618,612 // disable stream.Handle deprecation warning. if (!FlushFileBuffers(stream.Handle)) // Flush OS file cache to disk. #pragma warning restore 618,612 { Int32 err = Marshal.GetLastWin32Error(); throw new Win32Exception(err, "Win32 FlushFileBuffers returned error for " + stream.Name); } 

.NET 4.0 के लिए, आप इसके बजाय नए फ्लश (सत्य) विधि का उपयोग कर सकते हैं। 11/09/2012 अपडेट: एमएस बग रिपोर्ट यहां बताती है कि यह टूटा हुआ है, फिर तय है, लेकिन यह नहीं कहता कि संस्करण या सर्विस पैक किस प्रकार तय किया गया था! बग की तरह लगता है कि आंतरिक। नेट फ़ाइलस्ट्रीम बफर खाली है, फ्लश (सच) ने कुछ भी नहीं किया?

मैंने देखा है कि .NET 4 # फ़्लाश (सच्चा) वास्तव में डिस्क को नहीं लिखता है। हमें भ्रष्ट डेटा के साथ अजीब समस्याएं आ रही थीं और मुझे एमएस साइट पर इस बग रिपोर्ट मिली:

बग रिपोर्ट के विवरण टैब में एक परीक्षण प्रोग्राम है जिसे आप चला सकते हैं जो कि समस्या दिखाएगा;

  1. डिस्क के डेटा का एक गुच्छा लिखें
  2. fs.Flush(true) इसमें समय लगता है (संभवतः डिस्क पर लिखा जा सकता है जितना तेज हो)।
  3. Win32 API FlushFileBuffers उपयोग करें। यह एक लंबा समय लगता है।

मैं Win32 FlushFileBuffers कॉल में बदल रहा हूँ …

ठीक है, आप फाइल को बंद कर सकते हैं … शायद यह करना होगा। वास्तविकता में, एचएएल के पृथक्करण, वर्चुअलाइजेशन और डिस्क हार्डवेयर के साथ अब कंप्यूटर की तुलना में अधिक प्रोसेसिंग पावर और कैश मेमोरी हो रही है, कुछ साल पहले, आप उम्मीद कर रहे हैं कि डिस्क इसकी नौकरी करता है।

ट्रांसेक्शनल फाइल सिस्टम वास्तव में वास्तव में कभी भी भौतिक नहीं है; -पी निश्चित रूप से, आप शायद एक बैक एंड के रूप में डेटाबेस का उपयोग कर देख सकते हैं, और उसके लेनदेन प्रणाली का उपयोग कर सकते हैं?

एक तरफ: ध्यान दें कि सभी नदियों को Flush() गारंटी नहीं होती है – उदाहरण के लिए, GZipStream आदि एक फ्लश के बाद भी बिना GZipStream डेटा के काम बफर को बरकरार रखता है – इसे पूरी तरह से फ्लश करने का एकमात्र तरीका Close()

डिस्क पर लिखी जाने वाली फ़ाइल सिस्टम कैश में बफ़ेड फाइल डेटा। डिस्क लिखने की स्थिति की स्थिति के आधार पर यह डेटा आम तौर पर लिज़िली लिखित है। कैश्ड डेटा के गीगाबाइट को तकनीकी रूप से संभव है, इसलिए इसमें कुछ समय लग सकता है। यदि यह आपके लिए महत्वपूर्ण है तो इसके बजाय FileOptions.WriteThrough विकल्प पर विचार करें।

पूरी तरह से यह सुनिश्चित करने के लिए अमूर्त के बहुत सारे स्तर हैं कि डेटा को डिस्क पर लिखा गया है, ठीक नीचे हार्डवेयर स्तर पर।

शानदार ढंग से निष्पादक या बेजान नहीं, लेकिन फाइल को फिर से खोलने के बारे में कैसे एक अलग प्रक्रिया में लिखा गया है और आकार या सामग्री की जाँच करना?