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

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

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

Re[3]: [WFC] StreamのCloseに時間がかかってしまう。


(過去ログ 138 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■81005 / inTopicNo.1)  [WFC] StreamのCloseに時間がかかってしまう。
  
□投稿者/ Oharan (1回)-(2016/08/24(Wed) 18:27:40)

分類:[ASP.NET (C#)] 

WCF(.Net framwork3.5)を使用し数Gbyteのファイルをサーバからクライアントへダウンロードしています。
ダウンロードを途中で停止させようとしているのですが、(@部分)

サーバより取得した stream を Close しようとすると(A部分)
ファイルを全てReadしたのと同じ位時間がかかってしまいます。
(4GBのファイルでClose処理が完了するのに4〜5分掛かります)


なにかアドバイスを貰えれば助かります。
以上、よろしくお願いします。



サーバ---------------------------------
Stream GetFile()
{
	FileStream fs = new FileStream("C:\Data\Hoge.bin");
	return fs;
}


クライアント---------------------------------
void Download()
{
	Stream stream = GetFile();
	int readLen = 0;
	do
	{
		byte[] buf = new byte[65536];

		readLen	= stream.Read(buf, 0, buf.Length);

		if (this._cancel)
		{
			// キャンセルされたので停止する	@
			break;
		}

	} while (readLen > 0)

	// A
	stream.Close();		// Closeするのに時間がかかる
}

引用返信 編集キー/
■81007 / inTopicNo.2)  Re[1]: [WFC] StreamのCloseに時間がかかってしまう。
□投稿者/ WebSurfer (1012回)-(2016/08/24(Wed) 19:46:10)
No81005 (Oharan さん) に返信

ASP.NET の分類になっていますが間違いないですか?

そのコードで ASP.NET が関係するとすれば、ASP.NET でホストされている WCF アプリに
Windows Forms アプリとか WPF アプリでアクセスしているのかと思いましたが、そういう
ことですか?
引用返信 編集キー/
■81008 / inTopicNo.3)  Re[2]: [WFC] StreamのCloseに時間がかかってしまう。
□投稿者/ Oharan (2回)-(2016/08/24(Wed) 20:06:25)
ASP.NET で良いです。

サーバにサービスを作成し、
クライアントから、WindowsFormアプリでサーバにアクセスし、
ファイルをダウンロードしています。

-----------------



試した事1
・停止させるさいに stream の最後まで Seekできないかと考えましたが
  stream.CanSeek が false となっていて Seek は出来ませんでした。


	if (this._cancel)
	{
		stream.Seek(0, SeekOrigin.End); <= stream.CanSeek が false のためエラーになってしまう。
		break;
	}

引用返信 編集キー/
■81009 / inTopicNo.4)  Re[3]: [WFC] StreamのCloseに時間がかかってしまう。
□投稿者/ Oharan (3回)-(2016/08/24(Wed) 21:20:20)
すみません、自己解決しました。

下記の様にサーバ側で閉じることでうまく行きました。
WebSurferさんありがとうございました。



サーバ---------------------------------
static Stream m_stream;
Stream GetFile()
{
	FileStream fs = new FileStream("C:\Data\Hoge.bin");
	
	m_stream = fs;
	
	return fs;
}

void CloseStream()
{
	m_stream.Close();
}



クライアント---------------------------------
void Download()
{
	Stream stream = GetFile();
	int readLen = 0;
	do
	{
		byte[] buf = new byte[65536];

		readLen	= stream.Read(buf, 0, buf.Length);

		if (this._cancel)
		{
			// キャンセルされたので停止する	@
			break;
		}

	} while (readLen > 0)

	// A
	//stream.Close();		// Closeするのに時間がかかる
	CloseStream()
}


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -