小编Pet*_*ete的帖子

单步执行.NET Framework源代码?

我不确定如何说出问题,但我想通过代码,因为它通过.NET类/方法等.

之前我曾询问如何查看.NET库中类的代码,最后我得到了.NET Reflector,我很快就下载了.现在,作为一个例子,我正在寻找更多信息.

我的程序中有一个方法,如下所示:

public bool DoThisJob(string job)
{
  if (jobsICanDo.Contains(job))
           return true;
}
Run Code Online (Sandbox Code Playgroud)

jobsICanDo是包含不同作业的字符串数组.

当我执行该代码时,"包含(作业)"方法,我希望能够逐步完成代码,因为它一直通过返回结果的.NET库和类.

简而言之,我是一个菜鸟,我想了解所有的图书馆是如何工作的.我不只是想接受它的工作并继续前进.

我的具体问题是,我有.NET Reflector,可以查看所有.NET库中的代码,有没有办法让我真正看到这些代码在运行中并观察我的输入遍历.NET库和类?

编辑对于我正在寻找的内容,似乎至少有一些混乱.我在if(jobsICanDo.Contains(job))设置断点.我运行我的程序,它做了它的事情,当它到达那里它停止.当进入下一行代码时,它只返回true并继续前进.我想要做的是看看Contains方法正在做什么,就像我的其余代码一样.

.net c#

4
推荐指数
1
解决办法
1975
查看次数

模型绑定器究竟做了什么?如何有效地使用它?

我正在研究一些东西,并在buildstarted.com上看到关于模型粘合剂的博客文章.它实际上对我的目的来说非常好,但我不确定幕后会发生什么.我做的是创建一个名为的自定义ModelBinder USerModelBinder:

public class UserModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        ValueProviderResult value = bindingContext.ValueProvider.GetValue("id");
        MyEntities db = new MyEntities();
        User user = db.Users.SingleOrDefault(u => u.UserName == value.AttemptedValue);
        return user;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在我的Global.asax.cs我:

ModelBinders.Binders.Add(typeof(User), new UserModelBinder());

我的理解是使用模型绑定器允许我不必在涉及"用户"的每个控制器动作中使用以下行.因此,模型绑定器不会将"id"传递给动作,而是截取id,获取正确的"item"(在我的情况下为User)并将其转发给动作进行处理.

        MyEntities db = new MyEntities();
        User user = db.Users.SingleOrDefault(u => u.UserName == value.AttemptedValue);
Run Code Online (Sandbox Code Playgroud)

我也尝试在我的User类上使用注释,而不是使用Global.asax.cs中的行:

[ModelBinder(typeof(UserModelBinder))]
public partial class User
{
}
Run Code Online (Sandbox Code Playgroud)

我不是在寻找30页的白皮书,但我不知道模型绑定器是如何做到的.我只是想了解从发出请求到发送请求的时间会发生什么.所有这些"只是工作"的东西对我来说是不能接受的,哈哈.另外,使用注释与在Global.asax.cs中添加它有什么区别吗?它们似乎在我的测试中工作相同,但有任何陷阱吗?

annotations model-binding asp.net-mvc-3

4
推荐指数
1
解决办法
3348
查看次数

调试时堆栈溢出但未释放

我在下面有以下代码,它解析文本文件并索引单词和行:

bool Database::addFromFileToListAndIndex(string path, BSTIndex* & index, list<Line *> & myList)
{
    bool result = false;
    ifstream txtFile;
    txtFile.open(path, ifstream::in);
    char line[200];
    Line * ln;
    //if path is valid AND is not already in the list then add it
    if(txtFile.is_open() && (find(textFilePaths.begin(), textFilePaths.end(), path) == textFilePaths.end())) //the path is valid
    {
        //Add the path to the list of file paths
        textFilePaths.push_back(path);
        int lineNumber = 1;
        while(!txtFile.eof())
        {
            txtFile.getline(line, 200);
            ln = new Line(line, path, lineNumber);
            if(ln->getLine() != "")
            {
                lineNumber++; …
Run Code Online (Sandbox Code Playgroud)

c++ stack-overflow

4
推荐指数
1
解决办法
846
查看次数

Windows任务管理器确定程序内存使用的可靠性如何?

我可以使用任务管理器来检测巨大的内存泄漏吗?我有一个小文本解析程序,当我启动它时显示大约640K的内存使用量.当我解析文件并将其编入索引时,内存使用量会根据文件的大小而增加.然后当我"清除"索引时,我的内存使用率下降到1400K左右.在此之后,我可以添加任意数量的文件,当我清除索引时,内存使用量下降到1400k级别+或--a~5%.

这是在我改变程序之后.在更改之前,每次我索引一些文件然后清除时,内存使用量将继续增加.因此,经过多次清理后,我的程序的内存使用量不断增长.

我意识到这可能是一种"hackish"方式来描述我的应用程序,但我是一名学生,我所能找到的是商业性能分析工具,这是遥不可及的.我也读过关于valgrind的内容,这只是linux而且我正在开发Windows.完全使用任务管理器还是我被误导了?

c++ profiling memory-leaks memory-management

4
推荐指数
2
解决办法
4009
查看次数

小数,整数,铸造......哦,我的!

我正在阅读"Head First C#"一书,在其中一章我创建了一个程序,并使用声明为整数和小数的变量.Visual Studio对我进行了几次关于混合和匹配两者的问题.例如:

dinnerParty.NumberOfPeople = (int) numericUpDown1.Value;
Run Code Online (Sandbox Code Playgroud)

NumberOfPeople被声明为int,显然数字更新是小数.

此外,当将这些数字添加到一起时,该书会将M放在一些数字之后.例如:

public void SetHealthyOption(bool healthy)
{
    if (healthy)
    {
        CostOfBeveragesPerPerson = 5.00M;
    }
    else
    {
        CostOfBeveragesPerPerson = 20.00M;
    }
}
Run Code Online (Sandbox Code Playgroud)

CostOfBeveragesPerPerson声明为小数.

所以我有两个具体问题:

1)你怎么知道什么时候需要施展什么?我敢肯定有很多东西可以铸造......有人能提供一些很好的链接来学习铸造吗?

2)数字后的M是什么?

编辑

所以M表示该数字是小数而不是双数.为什么不直接将数字转换为十进制数:(十进制)50.00?什么是"功能"叫什么?如果我想看看哪些"信件"可用,我会谷歌?

.net c# integer casting decimal

3
推荐指数
1
解决办法
612
查看次数

如何逐步完成整个代码块?

我希望能够在设置断点时跳过代码的某些部分.例如,我有一个代码块,它迭代52次以创建一副牌.这是正常工作,我宁愿不必按F11继续通过该块.反正我是否"跳过"这个以便调试器继续进行下一个方法调用?

语言和IDE是VS 2008中的C#.

debugging breakpoints visual-studio

3
推荐指数
2
解决办法
527
查看次数

.hgignore似乎没有工作

.hgignore我的项目的根目录中有一个文件,它没有蹲下.当我这样做时hg add,我的项目目录中的每个文件都被添加和跟踪.无论我使用tortoisehg还是命令行,我都得到相同的结果.命令行是我的偏好.这里发生了什么?

.hgignore(取自关于SO的另一个问题):

# use glob syntax
syntax: glob

*.obj
*.pdb
*.user
*.aps
*.pch
*.vspscc
*.vssscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.cache
*.ilk
*.log
*.lib
*.sbr
*.scc
[Bb]in
[Dd]ebug*/
obj/
[Rr]elease*/
_ReSharper*/
[Tt]humbs.db
[Tt]est[Rr]esult*
[Bb]uild[Ll]og.*
*.[Pp]ublish.xml
*.resharper
Run Code Online (Sandbox Code Playgroud)

mercurial command-line tortoisehg hgignore

3
推荐指数
1
解决办法
1609
查看次数

需要正则表达式才能从字符串中提取字母和空格

我正在构建一个小实用程序方法来解析一行(一个字符串)并返回所有单词的向量.我下面的istringstream代码工作正常,除非有标点符号,所以自然我的修复是想在通过while循环运行它之前"清理"该行.

我很感激在c ++中使用正则表达式库的一些帮助.我最初的解决方案是我们substr()并去镇上,但这似乎很复杂,因为我将不得不迭代并测试每个字符,看看它是什么,然后执行一些操作.

vector<string> lineParser(Line * ln)
{
    vector<string> result;
    string word;
    string line = ln->getLine();
    istringstream iss(line);
    while(iss)
    {
        iss >> word;
        result.push_back(word);
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

c++ regex

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

使用set_union和set_intersection时出错

我有两套,我正在尝试做一个联合(我在做交叉时得到同样的错误).这是错误:

error C3892: 'std::_Tree_const_iterator<_Mytree>::operator *' : you cannot assign to a variable that is const
Run Code Online (Sandbox Code Playgroud)

代码片段(如果我用 - >注释掉行,那么代码编译并且我的工作方式可以正常工作):

    set<Line *>::iterator it;
    set<Line *> * newSet = new set<Line *>();
    leftLines = pLeft->getSet();
    rightLines = pRight->getSet();
 -->it = set_union(leftLines->begin(),leftLines->end(),rightLines->begin(), rightLines->end(), newSet->begin());
    for(it = leftLines->begin(); it != leftLines->end(); it++)
    {
        newSet->insert(*it);
    }
    for(it = rightLines->begin(); it != rightLines->end(); it++)
    {
        newSet->insert(*it);
    }
    it = newSet->begin();
    while(it != newSet->end())
    {
        result->insert(*it);
        it++;
    }
Run Code Online (Sandbox Code Playgroud)

我确定这是愚蠢的但我有点迷茫.我认为代码片段应该足够了,但我可以提供其他所需的东西.谢谢.

c++ intersection set

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

您可以将多少"数据"放入字符串中?

作为程序员,我们经常使用字符串.大多数时候,我使用它们而不会过多地考虑它们.最近,我一直在使用字符串从函数中返回大量信息而没有任何问题.我最新的例子是一个包含10个1000条目的二叉树.我有一个递归函数,只是在最后添加一个换行符字符串.这个功能毫无困难.

那么你可以在一个字符串中放入多少个字符,或者你只受可用内存量的限制,有什么"限制"吗?

c++ string

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