C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■89225 / )  Re[2]: MemoryStreamのメモリ解放
□投稿者/ 小道 (2回)-(2018/11/09(Fri) 08:47:13)
No89222 (Hongliang さん) に返信
> 返しているImageをDisposeしない限りはどうにもならないです。
> MemoryStreamはDisposeしてもメモリには影響しません。
> 
> ところで、コピーを作ってそれにPropertyItemを追加しているようですが、コピーではなくてオリジナルに直接追加してはいけないのでしょうか。

Hongliangさん、ご回答ありがとうございます。
PropetyItemは元々別のクラスから持ってきたため、そのままになっています。
呼び出し側は以下のようなコードなのですが、t.Dispose();しても軽くならず悩んでおります。



		void Button1Click(object sender, EventArgs e)
		{
		//フォルダーパスを格納	
				
		// FolderBrowserDialog の新しいインスタンスを生成する (デザイナから追加している場合は必要ない)
    		FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog();

    		// ダイアログの説明を設定する
    		folderBrowserDialog1.Description = "ジオタグしたい写真が格納してあるフォルダを選んでください。";

    		// ルートになる特殊フォルダを設定する (初期値 SpecialFolder.Desktop)
    		folderBrowserDialog1.RootFolder = System.Environment.SpecialFolder.MyComputer;

    		// 初期選択するパスを設定する
    		folderBrowserDialog1.SelectedPath = @"C:\";

    		// [新しいフォルダ] ボタンを表示する (初期値 true)
    		//folderBrowserDialog1.ShowNewFolderButton = true;

    		// ダイアログを表示し、戻り値が [OK] の場合は、選択したディレクトリを表示する
    		if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) {
    		folderpass = folderBrowserDialog1.SelectedPath;
    		
    		}

    		// 不要になった時点で破棄する (正しくは オブジェクトの破棄を保証する を参照)
    		folderBrowserDialog1.Dispose();
    	
    		IEnumerable<string> files =
    		System.IO.Directory.EnumerateFiles(folderpass, "*", System.IO.SearchOption.AllDirectories);
				
			string s1 = Interaction.InputBox("緯度を10進法で入力してください");
  			listBox2.Items.Add(this.Text = s1);
    		string s2 = Interaction.InputBox("経度を10進法で入力してください");
  			listBox3.Items.Add(this.Text = s2);
  		
    		string passout = @"C:\geotag\";
    		this.Text = "geotagimege";
    	
    		if (Directory.Exists(passout))
       	 	{
            
        	}
        	else
        	{
        	Directory.CreateDirectory(passout);
        	}
    	
    	
    	int count = 0;
  		int countoutput;
  		
  		double ido = double.Parse(s1);
  		double keido = double.Parse(s2);
		
  		//ファイル数を取得
  		var directory = folderpass;
		int fileCount = Directory.GetFiles(directory, "*", SearchOption.TopDirectoryOnly).Length;
  		  		
  		foreach(string s in files)
  		{		
  			string filepass = Path.GetFileName(s);
  			
  			string passin = @"C:\geotag\" + s;
  			
			Bitmap t = new Bitmap(s);

			
  				  	if(count == fileCount)
  					{
  					goto Exit;
  					}
  				  	
  				    else
  					{			
  					countoutput = count + 1;
  					
  					Geotag(t, ido, keido)
    				.Save(@"C:\geotag\" + filepass + "output" +  countoutput + ".jpg", ImageFormat.Jpeg);
  					
  					count = count + 1;
 					t.Dispose();
 					
  					
  					}
  						
  		}
 
		Exit:
  		MessageBox.Show("すべての写真のジオタグが完了しました。");
  		Application.Exit();
    	
    	
		}
	}

返信 編集キー/


管理者用

- Child Tree -