相关疑难解决方法(0)

各种.NET Framework版本的操作系统兼容性

每个.Net框架的最低操作系统要求是什么?例如,哪个版本无法运行每个操作系统:

  • Windows 95
  • Windows 98
  • Windows 98SE
  • Windows ME
  • Windows NT 3.x.
  • Windows NT 4
  • Windows 2000

我相信所有.Net框架都与XP,Vista,Windows Server 2003和Windows Server 2008兼容(如果错误,请纠正我).

.net windows version-compatibility

56
推荐指数
1
解决办法
6万
查看次数

.NET 4.5文件读取性能同步与异步

我们试图测量使用同步方法和异步读取一系列文件之间的性能.期望在两者之间大约有相同的时间但是使用异步的速度大约慢5.5倍.

这可能是由于管理线程的开销,但只是想了解您的意见.也许我们只是在测量时间错误.

这些是正在测试的方法:

    static void ReadAllFile(string filename)
    {
        var content = File.ReadAllBytes(filename);
    }

    static async Task ReadAllFileAsync(string filename)
    {
        using (var file = File.OpenRead(filename))
        {
            using (var ms = new MemoryStream())
            {
                byte[] buff = new byte[file.Length];
                await file.ReadAsync(buff, 0, (int)file.Length);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是运行它们并启动秒表的方法:

    static void Test(string name, Func<string, Task> gettask, int count)
    {
        Stopwatch sw = new Stopwatch();

        Task[] tasks = new Task[count];
        sw.Start();
        for (int i = 0; i < count; i++)
        {
            string filename = "file" …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous file .net-4.5

28
推荐指数
2
解决办法
2万
查看次数

OpenRead是异步的

我正在使用以下C#代码通过网络共享读取一个小文本文件:

string fileContent;
using (var stream = File.OpenRead(filePath))
using (var reader = new StreamReader(stream, FileEncoding))
{
    fileContent = await reader.ReadToEndAsync();
}
Run Code Online (Sandbox Code Playgroud)

即使文本文件非常小(小于10 KB),此操作有时需要约7秒才能运行.当发生这种情况时,我注意到大部分时间花在了上面

File.OpenRead(filePath)
Run Code Online (Sandbox Code Playgroud)

这可能是由于Windows必须解析文件共享并通过网络获取文件上的锁定.由于该方法调用不是异步的,因此阻止我当前的线程几秒钟.

是否有一种安全的方法可以异步读取磁盘中的文件,同时异步执行OpenRead?

c# file-io async-await

5
推荐指数
1
解决办法
1438
查看次数

如何正确使用 FileStream.ReadAsync 不阻塞 UI

我是异步编程的新手。我的用户界面中有一个按钮和文本框。我想单击该按钮,它将使用 FileStream.ReadAsync 方法读取文件,然后它应该在文本框中显示文件的结果。问题是我不想在读取文件时阻止我的 UI。我认为使用 Read 方法应该这样做。但它不起作用。此方法有什么不正确以及如何将 Read 更改为 ReadAsync?

  private  void Button_Click(object sender, RoutedEventArgs e)
        {
            string filename = @"D:\Log\log.txt";
            byte[] result;
            UnicodeEncoding uniencoding = new UnicodeEncoding();
            using (FileStream SourceStream = File.Open(filename, FileMode.Open))
            {
                result = new byte[SourceStream.Length];
                Task<int> tf = new Task<int>(()=> SourceStream.Read(result, 0, (int)SourceStream.Length));
                tf.ContinueWith((x) =>
                 {
                     try
                     {
                         string txt = Encoding.ASCII.GetString(result);
                         Dispatcher.BeginInvoke((Action)(() => txtBox.Text = txt));
                     }
                     catch (Exception ae)
                     {

                         MessageBox.Show(ae.Message);
                     }
                 });

                tf.Start();
            }
Run Code Online (Sandbox Code Playgroud)

c# asynchronous task task-parallel-library async-await

0
推荐指数
1
解决办法
310
查看次数

为什么有些异步方法是同步执行的

请看这段代码:

class Program
{
    static async void DoStuff()
    {
        StreamWriter s = new StreamWriter("a.txt");
        WebClient wc = new WebClient();
        await wc.DownloadStringTaskAsync(new Uri("http://www.microsoft.com"));  //1
        //await s.WriteAsync ("123");                                           //2
        Thread.Sleep(10000);
        Console.WriteLine("DoStuffEnd");
    }
    static void Main(string[] args)
    {
        Program.DoStuff();
        Console.WriteLine("MainEnd");
        Console.Read();
    }

}
Run Code Online (Sandbox Code Playgroud)

根据async/await的逻辑,在这种情况下一切正常.

输出:

  • MainEnd

  • 10秒后

  • DoStuffEnd

但如果我评论(1)和取消注释(2),输出是:

  • 10秒后

  • DoStuffEnd

  • MainEnd

为什么?

c# asynchronous async-await

-1
推荐指数
1
解决办法
85
查看次数