簡體   English   中英

.Net 中的托管和非托管資源

[英]Managed and Unmanaged resources in .Net

我對 .net 編程中的托管和非托管資源感到困惑。 我正在開發一個 vb.net 應用程序。 我在微軟網站上讀到,如果我們使用托管資源垃圾收集器將處理它,如果我們使用非托管資源,我們需要調用處理。 但是我在任何地方都沒有得到以下問題的答案。

  1. 如何將代碼使用的資源區分為“托管”和“非托管”? 我可以擁有屬於托管和非托管資源的資源列表嗎?
  2. 資源是在創建對象之前還是在創建對象之后使用/分配?
  3. 在非托管資源的情況下,一旦范圍關閉,資源是否會被處理,或者即使在范圍關閉后我也應該處理它?
  1. 如果類繼承IDisposable其非托管或包含一些非托管
  2. 不確定你的意思,它通常在 CTOR,所以創建對象時,它不能在之前,你認為 CTOR 是之后嗎? (oc 除非另有說明)
  3. 最佳實踐是在您使用某些托管代碼的任何地方繼承IDisposable ,但 .net 具有良好的 GC,除非您以某種方式鎖定非托管資源。 你應該沒事。

安裝包 Microsoft.Azure.Management.ResourceManager.Fluent

         var credentials = SdkContext.AzureCredentialsFactory
                    .FromServicePrincipal(clientId, clientSecret, tenantId, 
         AzureEnvironment.AzureGlobalCloud);

         var azure = Azure
                .Configure()
                .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
                .Authenticate(credentials)
                .WithSubscription(subscriptionID);
         List<IStorageAccount> storageAccounts = 
         azure.StorageAccounts.List().ToList();
            foreach (IStorageAccount storageaccount in storageAccounts)
            {
                var exportSecrets = true;
                CloudStorageAccount storageAccountss = new CloudStorageAccount(
                    new StorageCredentials(storageaccount.Name, 
                      storageaccount.GetKeys().FirstOrDefault().Value), true);
                var connString = storageAccountss.ToString(exportSecrets);
                var storageAccount = CloudStorageAccount.Parse(connString);
                CloudBlobClient myClient = storageAccount.CreateCloudBlobClient();
                ContainerResultSegment resultSegment = null;
                BlobContinuationToken continuationToken = null;
                resultSegment = myClient.ListContainersSegmented("", 
                  ContainerListingDetails.Metadata, 5, continuationToken, null, 
                  null);                   
                // Enumerate the containers returned.
                foreach (var container in resultSegment.Results)
                {
                    var containers = myClient.GetContainerReference(container.Name);
                    foreach (IListBlobItem item in container.ListBlobs(null, false, 
                     BlobListingDetails.None))
                    {
                        if (item.GetType() == typeof(CloudPageBlob))
                        {
                            CloudPageBlob pageBlob = (CloudPageBlob)item;
                            if (pageBlob.Name.Contains(".vhd"))
                            {
                                // 0. Unspecified  1. Locked 2. UnLocked 
                                if (Convert.ToInt32(pageBlob.Properties.LeaseStatus) 
                                 == 2)
                                {
                                    list.Add(new Disks { Name = 
                                      pageBlob.Name.ToString(), URI = 
                                            pageBlob.Uri.AbsoluteUri.ToString(), 
                                      ContainerName = container.Name.ToString() });
                                }
                            }
                        }

                    }
                }

            }
            Helper helper = new Helper();
            StringBuilder sb = new StringBuilder();
            DataTable dt = helper.GetData(list);
            foreach (DataRow dr in dt.Rows)
            {
                foreach (DataColumn dc in dt.Columns)
                    sb.Append(FormatCSV(dr[dc.ColumnName].ToString()) + ",");
                sb.Remove(sb.Length - 1, 1);
                sb.AppendLine();
            }
            File.WriteAllText("D:\\UnmanagedDisks.csv", sb.ToString());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM