我发现自己最近在Win32上做了更多的C/C++代码,并且来自C#背景我已经开发了一个完全一致的"干净代码"的痴迷,所以从美丽的System.*命名空间转回到组成Win32 API头文件的#defines的mishmash有点文化冲击.
在阅读了MSDN按字母顺序排列的Win32核心函数列表之后,我意识到Win32的API设计实际上是多么简单,不幸的是它被过去25年的所有瑕疵笼罩着,包括许多对16位编程的引用,它们在今天完全无关紧要64位世界.
我很快就要开始一个新的C/C++项目了,我正在考虑如何根据需要重新创建Win32的头文件.我可以将它设计得很漂亮,但它会保持与现有程序的100%二进制(和源)兼容性(因为#defines最终解决了同样的问题).
我想知道是否有人曾经尝试过这个(谷歌什么都没有),或者是否有人想劝阻我.
我想到的另一件事是,如何使用更干净的C Win32 API,可以在顶部设计更干净,更易于使用的C++ Win32 API包装器,因为旧的C Win32项目不会有任何命名空间污染.
编辑:
只是为了澄清,我不是为了提高编译性能或任何类型的优化,我完全清楚编译器会废弃所有未使用的东西.我在这里的任务是拥有一个很高兴使用的Win32头库(因为我不需要每次使用函数时都按下Caps-lock).
在使用大约16GB的索引文件写入索引文件之后,使用Lucene的索引器似乎在索引操作期间崩溃.
写入控制台的堆栈跟踪重复三次,原因我不知道.为简洁起见,我只提供了重复的单个部分.这是Lucene写给conolse的堆栈跟踪:
Lucene.Net.Index.MergePolicy+MergeException: Exception of type 'Lucene.Net.Index.MergePolicy+MergeException' was thrown. --->
System.IO.FileNotFoundException: Could not find file 'PATH_TO_MY_INDEX_DIRECTORY\_xx.cfs'.
File name: 'PATH_TO_MY_INDEX_DIRECTORY\_xx.cfs'
at Lucene.Net.Index.IndexWriter.HandleMergeException(Exception t, OneMerge merge)
at Lucene.Net.Index.IndexWriter.Merge(OneMerge merge)
at Lucene.Net.Index.ConcurrentMergeScheduler.MergeThread.Run()
--- End of inner exception stack trace ---
at Lucene.Net.Index.ConcurrentMergeScheduler.HandleMergeException(Exception exc)
at Lucene.Net.Index.ConcurrentMergeScheduler.MergeThread.Run()
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
Run Code Online (Sandbox Code Playgroud)
当我用Luke的Java版本打开生成的日志时,索引被删除(可能是因为它已损坏,例如"write.lock"文件仍然存在),尽管这可能是Luke的错误或错误配置.
创建这个索引大约需要36个小时,而且我不想第三次再次这样做(这不是第一次发生).
我不知道是什么造成了这个.我能做什么?
我正在使用Lucene.net 2.9.2,因为它是为.NET 3.5构建的最后一个版本.
我正在尝试在windows azure中获取我的worker角色的跟踪日志,但它不起作用,看不到任何错误.
我已经将我的应用程序配置为使用azure诊断程序,如下所述:https://www.windowsazure.com/en-us/develop/net/common-tasks/diagnostics/
首先,我在我的worker角色的app.config中有这个:
<system.diagnostics>
<trace>
<listeners>
<add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="AzureDiagnostics">
<filter type="" />
</add>
</listeners>
</trace>
</system.diagnostics>
Run Code Online (Sandbox Code Playgroud)
然后,在我的ServiceConfiguration.Cloud.cscfg中,我有这个连接字符串:
<ConfigurationSettings>
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="DefaultEndpointsProtocol=https;AccountName=XXXXXXX;AccountKey=XXXXXXXXX" />
...
Run Code Online (Sandbox Code Playgroud)
在我的ServiceDefinition.csdef中我有:
<Import moduleName="Diagnostics" />
Run Code Online (Sandbox Code Playgroud)
最后在WorkerRole.cs的OnStart()方法中我有:
var config = DiagnosticMonitor.GetDefaultInitialConfiguration();
config.Logs.ScheduledTransferPeriod = System.TimeSpan.FromMinutes(1.0);
config.Logs.ScheduledTransferLogLevelFilter = LogLevel.Information;
DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", config);
Run Code Online (Sandbox Code Playgroud)
然后我在Run()方法中做了一些Trace.WriteLine().
这应该是在存储中创建WADLogsTable,但事实并非如此.
当我通过远程桌面连接到我的实例时,我在事件查看器中看不到任何错误,我看到的唯一奇怪的是WaHostBootstrapper日志,我看到DiagnosticsAgent.exe进程启动两次,然后获取状态时进程响应而另一个没有响应,这是日志的一部分:
[00002868:00002872, 2012/11/23, 21:26:30.367, 00100000] <- WapGetEnvironmentVariable=0x800700cb
[00002868:00002872, 2012/11/23, 21:26:30.383, 00100000] <- WapGetEnvironmentVariable=0x800700cb
[00002868:00002872, 2012/11/23, 21:26:30.414, 00040000] Executing Startup Task type=2 rolemodule=Diagnostics cmd="E:\plugins\Diagnostics\DiagnosticsAgent.exe"
[00002868:00002872, 2012/11/23, 21:26:30.414, 00040000] Executing "E:\plugins\Diagnostics\DiagnosticsAgent.exe" . …Run Code Online (Sandbox Code Playgroud) (请注意,我只使用新的"刀片"Azure门户并使用新术语,因此请避免使用"Azure网站"之类的字词,因为它们不适用于此处).
在门户网站中,我创建了两个Azure应用服务,"foo-production"和"foo-staging" - 两者都存在于同一个订阅和资源组中,并共享相同的应用服务计划.这些应用程序服务代表简单的ASP.NET Web应用程序的生产和登台部署,该应用程序作为普通网站运行.
应用服务计划是"基本:1小".
我的理解是,当您将Azure应用服务与基本或更高版本的应用服务计划一起使用时,该计划代表一个我能够托管尽可能多的IIS网站的虚拟机 - 这些IIS网站在Azure中表示为Azure应用服务.
鉴于此,我会假设当我访问Kudu(https://yourwebsite.scm.azurewebsites.net/DebugConsole)中的VM的文件系统时,我将能够在一些公共根目录下看到每个网站的文件.
但是,当我访问该foo-production网站的Kudu控制台时,我发现其文件已存在,D:\home\site\wwwroot并且foo-staging找不到文件.
如果我正确理解这一点,这意味着Azure实际上只为每个网站创建了一个全新的虚拟机,并且网站无法共享文件系统 - 而且我无法拥有更高级的Azure管理的IIS配置 - 我必须创建我自己管理的Windows Server VM.
我可以理解每个网站单独的VM背后的动机,这看起来很浪费 - Windows Server每个VM至少需要1 GB的内存,但我的网站主要只是静态文件(但我不能使用SharedApp Service Plan因为我需要一些更高级的功能).那对微软来说那是不经济的.
如何在Azure托管环境中拥有多个Azure应用服务共享同一个VM?还是我错误地思考它?
为了避免X/Y问题:我将说明我主要关心的是文件的持久性.我正在部署的Web应用程序将上传的文件存储到webroot的子目录中,这些文件应永久存在.有一些含糊不清的信息:有些人建议网站(及其所有文件)被主动销毁和回收,并且应该使用Azure存储Blob.我想使用Azure文件共享,不幸的是我ACCESS_DENIED在使用时遇到错误,WNetAddConnection2而且有些用户报告说无法在Azure应用服务中使用Azure文件共享 - 尽管我找不到微软有关此的任何权威.
在Rust中,Option定义为:
pub enum Option<T> {
None,
Some(T),
}
Run Code Online (Sandbox Code Playgroud)
像这样使用:
fn may_return_none() -> Option<i32> {
if is_full_moon {
None
} else {
Some(1)
}
}
fn main() {
let optional = may_return_none();
match optional {
None => println!("None"),
Some(v) => println!("Some"),
}
}
Run Code Online (Sandbox Code Playgroud)
我不熟悉Rust内部,但最初我认为它可能与Nullable.NET 类似,所以我上面的Rust代码的编译逻辑就像这样:
// occupies `sizeof(T) + 1` memory space, possibly more depending on `Bool`'s alignment, so `Nullable<Int32>` consumes 5 bytes.
struct Nullable<T> {
Bool hasValue;
T value;
}
Nullable<Int32> MayReturnNone() {
if( isFullMoon ) …Run Code Online (Sandbox Code Playgroud) 我正在从(现已过时的)NuGet 包迁移Microsoft.WindowsAzure.Storage.Table到,WindowsAzure.Storage我可以看到我的项目中正在使用Azure.Data.Tables某些地方。DynamicTableEntity
但DynamicTableEntity不存在于Azure.Data.TablesNuGet 包中,仅存在于TableEntity和ITableEntity.
TableEntity可用于:
Microsoft.WindowsAzure.Storage.Table.TableEntityMicrosoft.Azure.Cosmos.Table.TableEntityMicrosoft.Azure.CosmosDB.Table.TableEntity。Azure.Data.Tables.TableEntity.DynamicTableEntity可用于:
Microsoft.WindowsAzure.Storage.Table.DynamicTableEntityMicrosoft.Azure.Cosmos.Table.DynamicTableEntityMicrosoft.Azure.CosmosDB.Table.DynamicTableEntity。TableEntity和之间有区别吗DynamicTableEntity?
我阅读了文章,但仍然不明白其相关性: v12下Azure.Data.Tables没有类。DynamicTableEntityAzure.Data.Tables
是否有任何等效的类可以用于迁移?
我为一个非直观的主题标题道歉.
我有一个表,Jobs其中每一行代表一个由计算机程序执行的维护任务.它有这样的设计:
CREATE TABLE Jobs (
JobId bigint PRIMARY KEY,
...
Status int NOT NULL,
OriginalJobId bigint NULL
)
Run Code Online (Sandbox Code Playgroud)
创建/启动作业时,其行将添加到表中,其状态为0.作业完成后,其状态将更新为1,当作业失败时,其状态将更新为2.当作业失败时,作业管理器将通过复制失败作业的详细信息将新行插入Jobs表中来重试作业,并重置Statusto 0并使用原始(失败)JobId OriginalJobId进行跟踪.如果再尝试失败,则应该再次尝试多达3次,以后每次重试将保持原来JobId的OriginalJobId列.
我的问题是尝试制定一个查询来获取当前失败的作业集并获得重试次数.
这是表格中的示例数据:
JobId | Status | OriginalJobId
1, 1, NULL -- Successful initial job
2, 0, NULL -- Pending initial job
3, 2, NULL -- Failed initial job
4, 1, 3 -- Successful retry of Job 3
5, 2, NULL -- Failed …Run Code Online (Sandbox Code Playgroud) 我的MVVM项目有这个ViewModel:
class ListViewModel : ViewModelBase {
public ObservableCollection<ListItemviewModel> Items { ... }
}
class ListItemViewModel : ViewModelBase {
public String Name { ... }
public Boolean IsChecked { ... }
public Boolean IsEnabled { ... }
}
Run Code Online (Sandbox Code Playgroud)
编写XAML似乎很简单:
<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridCheckBoxColumn Header="Is checked" Binding="{Binding IsChecked}" />
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
但是,我怎么能得到这么当ListItemViewModel的IsEnabled财产是false在DataGridCheckBoxColumn"该行中的蜂窝被禁用?
我尝试设置IsReadOnly={Binding IsDisabled}(并添加IsDisabled属性ListItemViewModel,但无济于事) - 我认识到将禁用/启用整个列,而不是单个单元格.
我也试过这些指令(如何在绑定到ObservableCollection时禁用DataGrid中的单元格):
<DataGridCheckBoxColumn Header="Is checked" …Run Code Online (Sandbox Code Playgroud) 我在 .NET 4.6.1 上的 ASP.NET 4.5 上使用 ASP.NET MVC 5。
我有两个控制器:
FooController
FooIndexController
Run Code Online (Sandbox Code Playgroud)
这是因为 的 Index 操作Foo很复杂,所以我觉得它们最好在自己的单独Controller类中。
我正在使用基于属性的路由。我的 ASP.NET MVC 版本Order在RouteAttribute.
我有这些动作:
class FooController {
// Returns a view to allow editing of the Foo entity
[HttpGet]
[Route("~/{tenant}/foo/{fooName}", Order=2)]
public ActionResult Edit(String fooName, FooViewModel model) {
...
}
}
class FooIndexController {
// Returns a CSV file download listing all of the Foo entities
[HttpPost]
[Route("~/{tenant}/foo/csv", Order=1)]
public ActionResult IndexCsv() {
... …Run Code Online (Sandbox Code Playgroud) 在Chrome开发者工具(自Chrome 63起)的“元素”窗口中选择一个元素时,“计算”标签将显示当前计算出的宽度和高度以及所有其他非默认属性。
但是据我所知,它并没有描述,解释或揭示来源或原因为一个元素的框的大小,如果它的大小是不是由于直接向直接设置属性,或者财产继承或级联。
考虑以下示例:
<div id="div1">
<p id="p1">Lorem ipsum</p>
</div>
Run Code Online (Sandbox Code Playgroud)
使用默认HTML5样式表(即div, p { display: block;})Chrome浏览器将显示计算的宽度和高度#div1,并#p1是相同的,但无处没有指出的高度#div1是造成#p1,也不是说#p1的身高是由它的内容引起的(也考虑到line-height,font-size以及其他相关的性质)。
如果将样式表更改为此:
#div1 { height: 500px; }
#p1 { height: 75%; overflow: hidden; }
Run Code Online (Sandbox Code Playgroud)
...然后,“开发人员工具”窗口应提供一些指示,表明#div1的高度直接来自height: 500px;属性,而#p1的高度现在源自#div1而不是其内容。
Chrome开发人员工具或JavaScript工具中是否存在此功能?
azure ×3
.net ×1
asp.net-mvc ×1
c ×1
c# ×1
css ×1
datagrid ×1
diagnostics ×1
header ×1
lucene ×1
lucene.net ×1
luke ×1
mvvm ×1
rust ×1
sql ×1
sql-server ×1
winapi ×1
wpf ×1