小编Jen*_*ens的帖子

C#中的简单状态机示例?

更新:

再次感谢这些例子,他们非常有帮助,以下我并不是要从他们身上拿走任何东西.

就我理解它们和状态机而言,目前给出的例子不是我们通常理解的状态机的一半吗?
在某种意义上,示例确实改变了状态,但这只是通过改变变量的值来表示(并允许在不同的状态中允许不同的值变化),而通常状态机也应该改变它的行为,并且行为不是(仅)在根据状态允许变量的不同值更改的意义,但是允许针对不同状态执行不同方法.

或者我对状态机及其常见用途存在误解?

最好的祝福


原始问题:

在c#中找到了关于状态机和迭代器块的讨论以及创建状态机的工具以及C#没有的东西,所以我发现了许多抽象的东西,但作为一个菜鸟,所有这些都有点令人困惑.

因此,如果有人可以提供一个C#源代码示例,它可以实现一个简单的状态机,可能有3,4个状态,只是为了得到它的要点.


c# state-machine

244
推荐指数
12
解决办法
22万
查看次数

ASP.NET MVC 3 - 无法找到请求的.Net Framework数据提供程序

背景信息:

我正在使用Microsoft Visual Web Developer 2010 Express.
关于我(缺乏)经验的信息:我正在尝试解决的第一个教程中出现的问题.

一些额外的信息:

  • 我对C#,Postgres,Rails很满意(所以MVC和Web应用对我来说并不陌生)
  • 没有使用ASP.NET或SQL Server的经验

问题描述:

我正在尝试完全遵循"介绍到ASP.NET MVC 3"教程中的步骤,并且我在第5部分的第一步遇到问题- 添加MoviesController:

当我尝试使用教程中显示的确切设置添加"MoviesController"并单击"添加"时,我收到以下错误:

"无法检索元数据MvcMovie.Models.Movie.无法找到所请求的.NET Framework数据提供.它可能没有安装."

Google在搜索"无法找到所请求的.Net Framework数据提供程序"这一短语时给出了大量结果,但到目前为止还没有解决问题.

我尝试过的:

我认为SQL-Server没有安装,所以我从Visual-Studio Express ISO安装了一个错误然后我从ISO运行修复它声称所有15点包括SQL Server Express修复和.NET 4 Framework成功地完成了.

我已经运行了The_.NET_Framework_Setup_Verification_Tool,它成功完成了所有事情. http://blogs.msdn.com/b/astebner/archive/2008/10/13/8999004.aspx

在提到(重新)安装和修复之后,我重新创建了项目,并按照教程中的描述执行了每个步骤并得到了相同的错误.

我发现我应该在machine.config中查找DbProviderFactories,

项目的root-Web.config具有以下条目

  <connectionStrings>
    <add name="MovieDBContext"
     connectionString="Data Source=|DataDirectory|Movies.sdf"
     providerName="System.Data.SqlServerCe.4.0"/>
Run Code Online (Sandbox Code Playgroud)

我的机器配置文件只有一个DbProviderFactories条目:

<DbProviderFactories>
<add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/></DbProviderFactories>
Run Code Online (Sandbox Code Playgroud)

然后我发现了以下引用

"我们改变了DbProviderFactories.GetFactoryClasses()确定VS2010中框架提供程序的方式.它们不再列在machine.config文件中."

来自http://social.msdn.microsoft.com/Forums/en-ZA/adodotnetdataproviders/thread/d79129c4-ae05-4c45-8997-bd90f5765a3a

题:

所以也许这是错误的方向,因为我不知道下一步该尝试什么,我应该采取什么步骤来调查和解决这个问题? …

c# sql-server visual-web-developer dataprovider asp.net-mvc-3

55
推荐指数
3
解决办法
6万
查看次数

Xaml - Bitmap UriSource - 绝对路径工作,相对路径没有,为什么?

我是一个WPF和Xaml-noob,对于控制台应用程序,它对我来说只是给出了可执行文件的相对路径来访问文件.它对我来说似乎不适用于xaml.(底部代码)
绝对路径完美无缺.

是否可以在WPF应用程序的XAML中通过简单地使用可执行文件目录的相对路径作为有效的UriSource来访问文件?如果是的话,如果不是,为什么不呢?

我发现了以下问题,他们在谈论通过Visual Studio的"添加现有项目"添加文件,所以这似乎是一个不同的问题.

如何将WPF BitmapImage UriSource属性设置为相对路径?

<Window.Icon>
  <!--absolute path works:-->
  <BitmapImage UriSource="C:\LongPath\SolutionFolder\ProjectFolder\bin\Debug\path4.ico" />

  <!--none of the following relative paths worked:-->
  <!--AppDomain.CurrentDomain.BaseDirectory returns the Debug-folder-->
  <!--<BitmapImage UriSource="path4.ico" />-->
  <!--<BitmapImage UriSource="../path4.ico" />-->
  <!--<BitmapImage UriSource="Debug/path4.ico" />-->
  <!--<BitmapImage UriSource="bin/Debug/path4.ico" />-->
  <!--<BitmapImage UriSource="../bin/Debug/path4.ico" />-->
  <!--<BitmapImage UriSource="../../bin/Debug/path4.ico" />-->
  <!--<BitmapImage UriSource="../Debug/path4.ico" />-->
</Window.Icon>
Run Code Online (Sandbox Code Playgroud)

wpf xaml relative-path

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

最简单的方法是将NHibernate用于官方的"ASP.Net MVC 3入门"教程

澄清更新的问题 - 开始


官方的MVC 3入门教程中,在我看来,我们要做的就是让ORM正常工作是两个步骤.

首先添加简单的MovieDBContext代码,如第4部分末尾所述.

public class MovieDBContext : DbContext 
{
    public DbSet<Movie> Movies { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

.. 在第5部分开头第二步,只需右键单击Controllers文件夹,我们就可以自动生成一个实现CRUD()的MoviesController - 使用Entity Framework的功能,只需告诉使用哪个Model.
现在,当使用Web应用程序时,我们已经可以从数据库中编写和读取.

使用NHibernate而不是使用Entity Framework为我们的Movie-Model完成这个最简单(或简单)的方法是什么?


澄清更新的问题 - 结束





原始问题(仅适用于其他背景信息):


我正在尝试创建一个使用NHibernate和Postgres的ASP.Net MVC 3应用程序.

背景资料

使用Visual Web Developer Express在Windows上完成开发,生产环境将是/应该是Linux + Mono.

迄今为止有效的步骤:

  • 使用Npgsql和Postgres作为数据库的ASP.Net动态数据实体Web应用程序.在Windows开发机器上成功运行. (遵循本教程)
  • 尚未使用数据库/模型的ASP.Net MVC 3应用程序:在Windows开发计算机上成功运行,并使用Mono和Nginx部署到Linux生产环境.(仅作为我自己的概念证明,而不是公众使用的网络应用程序.)
  • 一个ASP.Net MVC 3应用程序,其中一个模型使用SQL Server Express作为DB.在我的Windows开发机器上成功运行. (遵循MVC 3入门 - 教程)

到目前为止,我设法让Postgres使用"动态数据实体Web应用程序",但是使用MVC 3 Web应用程序,我仍然坚持在哪里/如何开始.对于最后提到的MVC-3-Movie-Webapp,我想使用NHibernate和Npgsql将数据库从SQL Server Express切换到Postgres(NHibernate,因为Mono不支持实体框架).

当你看到第4部分结尾时, …

postgresql nhibernate entity-framework asp.net-mvc-3

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

垃圾收集孤立对象(树节点)适用于"release-exe",但不适用于VS-debugger

情况

根据这个已接受的答案,如果" GC"看到'2个或更多对象的循环引用,这些对象未被任何其他对象或永久GC句柄引用,则将收集这些对象.

我想知道垃圾收集是否适用于一个甚至没有内容的超级简单树结构,只是带有父级和子级引用的树节点.

想象一下,你创建一个根节点为它添加一个子节点,然后为子节点添加一个子节点等等,所以不是一个树,而是更像一个列表(每个节点最多只有一个子节点和一个父节点).

如果我们理解上面的答案,然后我们删除了root的子节点以及对该子节点子节点的所有引用,则垃圾收集器应该清理子树.

问题描述

如果你看一下下面测试代码中的Main方法,当从Release-directory运行exe时,我得到的行为我希望内存消耗增加到~1GB然后下降到~27MB(在1之后). GC.collect再次向上然后再降低到~27MB(对于2. GC.collect).

现在当它在调试器中运行时,内存消耗达到~1GB并且对于1.GC.collect内存消耗保持精确的地方然后上升到1.6GB,第二个for循环需要很长时间然后我最后在第二个for循环中得到一个OutOfMemoryException.

问题

为什么我在调试器中得到这种行为?
在调试期间不应该进行垃圾收集工作,我是否遗漏了一些关于调试器的信息?

旁注

  • 我正在使用visual studio 2010 Express版
  • 我只在这里调用GC.Collect()用于特定的测试目的,以确保应该进行垃圾收集.(我不打算正常使用它)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;    

namespace Tree
{
  class Program
  {
    static void Main(string[] args)
    {

      TreeNode root = new TreeNode(null); // the null-argument is the parent-node

      TreeNode node = root;

      for (int i = 0; i < 15000000; i++)
      {
        TreeNode child = new TreeNode(node); 
        node = child; …
Run Code Online (Sandbox Code Playgroud)

c# tree garbage-collection visual-studio

2
推荐指数
1
解决办法
2000
查看次数