我正在尝试使用基于 flexbox 的布局来显示带有粘性页脚的页面。这适用于所有浏览器中的短页面(小于窗口高度)。然而,长页面的相同方法在 Firefox 中也有效,但 IE11 将容器元素削减到子元素的 25% 左右。
这是示例:https : //codepen.io/vers/pen/rraKYP
html {
height: 100%;
}
body {
height: 100vh;
display: flex;
flex-direction: column;
}
div.container {
max-width: 600px;
background-color: #aaa;
flex-grow: 1;
display: flex;
flex-direction: column;
font-family: 'Roboto', sans-serif;
font-size: 20px;
line-height: 1.5;
}
div.content {
margin: 8px;
flex-grow: 1;
}
div.header,
div.footer {
background-color: black;
color: #fff;
}Run Code Online (Sandbox Code Playgroud)
<html>
<body>
<div class="container">
<div class="header">Header</div>
<div class="content">
<p>...</p>
<!-- 40 long paragraphs here -->
</div>
<div class="footer">Footer</div> …Run Code Online (Sandbox Code Playgroud).NET 4.5添加了新的类来处理zip存档.现在你可以这样做:
using (ZipArchive archive = ZipFile.OpenRead(zipFilePath))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
// Extract it to the file
entry.ExtractToFile(entry.Name);
// or do whatever you want
using (Stream stream = entry.Open())
{
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
显然,如果您使用大型存档,则可能需要几秒甚至几分钟才能从存档中读取文件.因此,如果您正在编写一些GUI应用程序(WinForms或WPF),您可能会在单独的线程中运行此类代码,否则您将阻止UI线程并使您的应用程序用户非常沮丧.
但是,此代码中的所有I/O操作都将在2016年被视为"不酷" 的阻塞模式下执行.因此,有两个问题:
System.IO.Compression类(或者可能与其他第三方.NET库)获得异步I/O ?更新:
回答Peter Duniho的回答:是的,你是对的.出于某种原因,我没有考虑这个选项:
using (Stream zipStream = entry.Open())
using (FileStream fileStream = new FileStream(...))
{
await zipStream.CopyToAsync(fileStream);
}
Run Code Online (Sandbox Code Playgroud)
绝对有效.谢谢!
顺便说说
await Task.Run(() => entry.ExtractToFile(entry.Name));
Run Code Online (Sandbox Code Playgroud)
还会 是CPU限制的阻塞I/O操作,只是在单独的线程中 在I/O操作期间消耗线程池中的线程.
但是,我可以看到.NET的开发人员仍然使用阻塞I/O进行某些归档操作(例如,此代码枚举归档中的条目,例如:dotnet @ github上的ZipArchive.cs …