我有一个类层次结构,每个成员可以创建IDisposable对象.
我List<IDisposable>在此层次结构中向基类添加了一个属性,我在创建时添加了任何一次性对象.root Dispose方法遍历此列表并调用Dispose其列表中的每个项目并清除列表.在应用程序中,我显式调用顶层对象的Dispose方法,导致处理级联层次结构.
这有效,但还有更好的方法吗?我是否无意中重复了框架中已有的某些功能?
(注意 - 有问题的对象有一个生命周期,不能将它们包装在一个using块中,或者在创建它们的同一个方法中处理它们.)
编辑
只是为了澄清 - 我只是保留那些需要保留的物体.有些是在创建它们的同一方法中处理掉的,但是很多都是以不可能的方式使用的.
在使用ASP.NET webforms时,我发现用户控件非常有用.通过使用标记封装显示控件所需的代码,可重用组件的创建非常简单且非常非常有用.
虽然MVC提供了方便的关注点分离,但这似乎打破了封装(即,您可以在不添加或使用其支持代码的情况下添加控件,从而导致运行时错误).每次我向视图添加控件时都必须修改控制器,这似乎是我要集成关注点,而不是将它们分开.我宁愿打破纯粹的MVC意识形态,也不愿放弃可重复使用的打包控件的好处.
我需要能够在整个站点中包含类似于webforms用户控件的组件,但不能包含整个站点,而不是属于母版页的级别.这些组件应该有自己的代码,而不仅仅是标记(与业务层交互),如果页面控制器不需要知道控件,那将是很好的.由于MVC用户控件没有代码隐藏,我看不到这样做的好方法.
最后更新 ,一个很好的(并且,回想起来,很明显)实现这一目标的方法.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace K.ObjectModel.Controls
{
public class TestControl : ViewUserControl
{
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
writer.Write("Hello World");
base.Render(writer);
}
}
}
Run Code Online (Sandbox Code Playgroud)
创建一个继承的新类 ViewUserControl
覆盖.Render()如上所示的方法.
通过其关联的ASCX注册控件,就像在webForm中一样:
<%@ Register TagName="tn" TagPrefix="k" Src="~/Views/Navigation/LeftBar.ascx"%>
在您需要的任何视图或母版页中使用相应的标记:
<k:tn runat="server"/>
确保您的.ascx继承了您的新控件:
<%@ Control Language="C#" Inherits="K.ObjectModel.Controls.TestControl" %>
瞧,你已经开始运转了.这是使用ASP.NET MVC 2,VS 2010和.NET 4.0进行测试的.
您的自定义标记引用ascx部分视图,该视图继承自TestControl类.然后控件覆盖该Render()方法,该方法被调用以呈现视图,使您可以完全控制从标记到输出的过程.
使用这种方法和调用Html.RenderPartial()或"Html.RenderAction()" 之间的区别是将控件添加到视图中是使用类似webforms的标记,这不仅对设计人员来说更舒适,而且使他们不必了解控制器名称和方法.控件类的名称与ASCX隔离,也可以更容易地将它们放入程序集中,并在不同的项目中重用它们.
有些人可能会说这违反了SoC,但我相信这种方法在功能上等同于将部分视图和控制器绑在一起,同时保持干净的标记.然而,应该清楚的是,开发人员仍然只能在控制中保留与表示相关的逻辑.业务和数据访问逻辑仍然属于它们各自的层.
是否有任何免费组件可以为HLSL提供突出显示和/或智能感知功能?
我见过一些名为"InteliSense.Net"的内容,但作者的网站已关闭,我无法在任何地方找到下载内容.
如果我有一个功能:
Foo& Bar()
{
return /// do something to create a non-temp Foo here and return a reference to it
}
Run Code Online (Sandbox Code Playgroud)
为什么是这样:
auto x = Bar(); /// probably calls copy ctor - haven't checked
Run Code Online (Sandbox Code Playgroud)
这不一样吗?
auto &x = Bar(); /// actually get a reference here
Run Code Online (Sandbox Code Playgroud)
(实际上,我希望第二个版本能够获得对引用的引用,这没什么意义.)
如果我明确地将类型指定x为值或引用,我将得到我期望的(当然).但是,我希望auto能够编译为返回类型Bar(),在这种情况下,它是一个引用.
有没有之间的隐式转换Foo和Foo&该进场吗?
(规范参考被接受了,虽然我已经厌倦了阅读委员会发言.)
(默认情况下,第二次使用时间机器将使C++通过引用传递.使用#pragma compatibility触发器编译C代码.ARGH.)
我想知道在使用jquery和ajax时停止重复提交的最佳方法是什么?
我想出了两种可能的方法,但不确定这些是否只有2种.
在Ajax启动时禁用所有按钮,直到请求完成.我看到的2个问题虽然是我使用jquery模型对话框所以我不知道禁用那些按钮是多么容易,因为我不确定他们是否有id.第二,如果请求挂起,用户实际上无法再次尝试,因为所有按钮都被禁用.
我正在研究一种叫做AjaxQueue的东西,此时我不知道它是否是我需要的,或者它是如何工作的,因为该插件显然需要维护的网站.
http://docs.jquery.com/AjaxQueue
编辑
我认为这是我所关注的问题.
http://www.protofunc.com/scripts/jquery/ajaxManager/
我用这个ajaxManager看到的唯一问题是我认为我必须将所有$ .post,$ .get和$ .ajax更改为他们的类型.
但是如果我需要来自$ .ajax的特殊参数会发生什么?或者我喜欢使用.post和.get.
编辑2
我认为它可以采用所有$ .ajax选项.我还在调查它.但是我现在不确定的是,我可以对将使用相同选项的所有请求使用相同的构造函数.
First you have to construct/configure a new Ajaxmanager
//create an ajaxmanager named someAjaxProfileName
var someManagedAjax = $.manageAjax.create('someAjaxProfileName', {
queue: true,
cacheResponse: true
});
Run Code Online (Sandbox Code Playgroud)
或者我每次都必须完成上述操作?
是否有任何一点实现移动构造函数并为仅包含基本类型的结构或类移动赋值运算符?例如,
struct Foo
{
float x;
float y;
float z;
/// ... ctor, copy ctor, assignment overload, etc...
};
Run Code Online (Sandbox Code Playgroud)
我可以看到,如果我有更复杂的东西,比如:
struct Bar
{
float x,y,z;
std::string Name;
};
Run Code Online (Sandbox Code Playgroud)
我宁愿移动而Name不是复制它,移动ctor会有意义.然而,"移动"浮动并不(语义上)对我有意义.
思考?
我正在尝试找到可以合并到现有MVC3应用程序中的CMS.
我玩过N2,并且无法在VS2010或.NET 4中使用该死的东西.
Umbarco似乎还没有支持MVC
Orchard看起来很棒,但想拥有整个应用程序.
DNN只是一团糟.
还有其他精彩的解决方
验尸2011年12月
这是一篇很老的帖子,但我想我会和Orchard分享经验,为什么我决定走另一个方向.
NHibernate的
除了在非常大量的每页的数据(从字面上几十个在某些情况下)的,每一个查询使用执行sp_executesql.虽然没有使用那么糟糕Exec(),但这让我误解了.目前,我的数据库被锁定,以便应用程序只能执行存储过程 - 也就是说,它们不能执行选择/更新/删除,列表实体(如表),获取任何元数据等.这是分层的要求单元测试,数据库的编译时验证,安全性以及应用程序代码对数据库逻辑的封装.
源部署
Orchard要求将您站点的整个源(视图,.cs源文件等)部署到生产服务器.需要部署的大量源文件令人难以置信.
与现有应用程序集成
Orchard的结构化方式有效地要求它成为Web应用程序的入口点.这意味着您将花一些时间修改和重新实现您的应用程序,以使其与Orchard一起玩得很好.
结论 我遇到了很多其他问题,但这些都是亮点.单独来说,每一个都可能成为交易破坏者.他们一起将Orchard作为一个可行的解决方案.
我现在正在评估Telerik的Sitefinity.这不是MVC,让我很难过,但是:
道歉为长篇大论.希望这会有所帮助.
我尝试在声明期间在向量中移动一些unique_ptr,我收到错误.我想我在不知情的情况下制作副本.
我不明白为什么我在声明中遇到问题,而在push_back期间它工作得很好.
我用几行简化了问题.
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
int main() {
unique_ptr<int> i1 = make_unique<int>(142);
unique_ptr<int> i2 = make_unique<int>(242);
unique_ptr<int> i3 = make_unique<int>(342);
vector<unique_ptr<int>> v;
//Those lines work
v.push_back(move(i1));
v.push_back(move(i2));
v.push_back(move(i3));
//ERROR
vector<unique_ptr<int>> v2 {move(i1), move(i2), move(i3)};
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误是:
use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const
std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp =
std::default_delete<int>]'
{ ::new(static_cast<void*>(__p)) _T1(std::forward<_Args>(__args)...); }
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
谢谢 !
任何人都能指出这段代码中的缺陷吗?我正在使用TcpClient检索一些HTML.与IIS服务器通信时,NetworkStream.Read()似乎永远不会完成.如果我去使用Fiddler代理,它可以正常工作,但直接与目标服务器通信时,.read()循环将不会退出,直到连接异常时出现"远程服务器已关闭连接"之类的错误.
internal TcpClient Client { get; set; }
/// bunch of other code here...
try
{
NetworkStream ns = Client.GetStream();
StreamWriter sw = new StreamWriter(ns);
sw.Write(request);
sw.Flush();
byte[] buffer = new byte[1024];
int read=0;
try
{
while ((read = ns.Read(buffer, 0, buffer.Length)) > 0)
{
response.AppendFormat("{0}", Encoding.ASCII.GetString(buffer, 0, read));
}
}
catch //(SocketException se)
{
}
finally
{
Close();
}
Run Code Online (Sandbox Code Playgroud)
更新
在调试器中,我可以看到整个响应立即通过并附加到我的StringBuilder(响应).当服务器完成发送响应或我的代码没有检测到它时,似乎连接没有被关闭.
结论 正如这里所说的,最好利用协议的产品(在HTTP的情况下,Content-Length头)来确定事务何时完成.但是,我发现并非所有页面都设置了内容长度.所以,我现在正在使用混合解决方案:
对于所有事务,请将请求的Connection标头设置为"关闭",以防止服务器保持套接字打开.这可以提高服务器在响应您的请求时关闭连接的几率.
如果Content-Length已设置,请使用它来确定请求何时完成.
否则,将NetworkStream的RequestTimeout属性设置为一个大但合理的值,如1秒.然后,循环开启,NetworkStream.Read()直到a)超时发生,或b)您读取的字节数比您要求的少.
感谢大家的出色和详细的回复.
我对NVidia GPU中核心数量,SMP数量和最大线程数量之间的关系感到困惑.笔记本电脑GT650m的设备属性显示384个内核,2个SMP,每个SMP有1024个线程.
这些数字如何相互关联和扭曲?我假设(可能不正确)每个SMP有192个核心,但这不是1024的因素.如果每个核心运行32个线程的warp,我预计每个SMP会有32*192个线程,或者2 ^ 5*(2 ^ 7 + 2 ^ 6),或4096 + 2048 = 6142.
我错过了什么?
c++ ×3
c# ×2
ajax ×1
architecture ×1
asp.net ×1
asp.net-mvc ×1
auto ×1
casting ×1
cuda ×1
hardware ×1
hlsl ×1
idisposable ×1
integration ×1
intellisense ×1
jquery ×1
reference ×1
tcpclient ×1
unique-ptr ×1
vector ×1