我有一个有近20个公共场所的课程.这些属性的共同之处在于它们都是字符串,并且它们填充了来自数据库的不同表的数据.
此外,该设置非常正常,而get是特殊的,因为我需要调用特定的方法.目前为每个房产都做了这个(见下文).
我的问题是:是否有另一种更有效的方法,这样我就不必用这种方式手工定义每个公共财产?
class myclass
{
     private string _Firstname;
     private string _Lastname;
     .....
     public string Firstname
     {
         get {
             return ModifyStringMethod(this._Firstname);
         }
         set {
             this._Firstname = value;
         }
     }
}
如上所述,每个公共财产看起来都一样.get调用ModifyStringMethod,私有成员作为参数给出,而set只设置私有成员.
我的情况是我想只列出另一个列表的列表.如果可能的话,参考.
到目前为止我所做的是这里:
List<string> partialList = originalList.Skip(start).Take(end-start).ToList();
示例:包含6个元素的列表,开始为2,结束为4.
In New List   Element
N             0
N             1
Y             2
Y             3
Y             4
N             5
据我所知.ToList()它创建了原始结果的副本.因此,这将是价值而非参考.所以我的问题是:是否有任何"按参考"的方式来实现我想要的结果?
由于一些限制,我无法使用实体框架,因此需要手动使用SQL连接,命令和事务.
在为调用这些数据层操作的方法编写单元测试时,我偶然发现了一些问题.
对于单元测试,我需要在事务中执行它们,因为大多数操作都是按其性质更改数据,因此在事务之外执行它们会产生问题,因为这会改变整个基础数据.因此,我需要围绕这些进行事务处理(最后没有提交任何提交).
现在我有两种不同的变体,这些BL方法的工作方式.一些交易本身就在其中,而其他交易本身则没有交易.这两种变体都会引起问题.
分层事务:在这里我得到DTC由于超时而取消分布式事务的错误(尽管超时设置为15分钟且运行仅2分钟).
只有1个事务:当我来到"new SQLCommand"被调用方法的行时,我得到一个关于事务状态的错误.
我的问题是如何解决这个问题并通过手动普通和分层交易进行单元测试?
单元测试方法示例:
using (SqlConnection connection = new SqlConnection(Properties.Settings.Default.ConnectionString))
{
    connection.Open();
    using (SqlTransaction transaction = connection.BeginTransaction())
    {
        MyBLMethod();
    }
}
使用方法的事务示例(非常简化)
using (SqlConnection connection = new SqlConnection(Properties.Settings.Default.ConnectionString))
{
    connection.Open();
    using (SqlTransaction transaction = connection.BeginTransaction())
    {
        SqlCommand command = new SqlCommand();
        command.Connection = connection;
        command.Transaction = transaction;
        command.CommandTimeout = 900;   // Wait 15 minutes before a timeout
        command.CommandText = "INSERT ......";
        command.ExecuteNonQuery();
        // Following commands
        ....
        Transaction.Commit();
    }
}
非Transaction使用方法的示例
using …我正在审查/重做我的同事的代码,偶然发现了一个我以前从未见过的构造:
con = new SqlConnection("Data Source=.....");
con.FireInfoMessageEventOnUserErrors = true;
con.InfoMessage += new SqlInfoMessageEventHandler(myInfoMessage);
附:
void myInfoMessage(object sender, SqlInfoMessageEventArgs e)
{
    foreach (SqlError err in e.Errors) 
    {
        errors += err.LineNumber.ToString() + ": " + err.Message + "\r\n";
    }
}
现在据我所知,除了真正严重的错误之外,所有这些都可以被捕获(17 +类错误不会因为它们会保持异常).现在我得到的是,在某些情况下,您不希望抛出和捕获异常,而是希望它作为信息消息(或标志集).在这种情况下,我认为这是一个有用的结构.
在我正在审查的代码的情况下,在errors执行sql命令之后立即检查,然后以文本形式抛出异常.
这让我想知道我是否正确地看到它否定了我在第一时间捕获信息中心的唯一优势.
所以我的问题是:捕获SQL连接的信息消息有什么好处?
或者换句话说,我看到唯一的一个优势还是我在那里忽略了其他优势?
我从.Net 3.5 Framework Client调用2个webservices(Server是一个更现代的.NET Framework Server:4.6).
分开我遇到没有问题,但是如果我按照下面显示的顺序调用方法,我得到的问题是服务器上的VerifyFile方法永远不会输入,而是我立即得到一个服务器已经提交了协议Violation Section = ResponseStatusLine错误在客户端上.更确切地说:服务器在事件中注册VerifyFile请求但直到最多6分钟后才输入实际代码(并且立即返回导致上述错误的内容).
经过多次测试后,我可以将其减少到第一种方法"DownloadFile"是问题的原因.总是当我从状态代码中返回任何其他内容时(内容与否无关紧要).
我完全失去了这种现象(我本来希望客户有麻烦,但是服务器没有进入那个代码部分,直到MINUTES后来看起来服务器正在进入麻烦本身,这是意料之外的,也是出乎意料的是SECOND方法而不是原始方法遇到了问题.
所以我的问题是为什么返回除了HttpStatusCode.OK之外的任何内容导致这些问题以及我该怎么做才能纠正这个问题?
客户:
WebClient webClient = new WebClient();
webClient.QueryString.Add("downloadId", id);
webClient.DownloadFile("localhost/Download/DownloadFile", @"c:\temp\local.txt");
webClient = new WebClient();
webClient.QueryString.Add("downloadId", id);
webClient.QueryString.Add("fileLength", GetFileLength(@"c:\temp\local.txt"));
var i = webClient.DownloadString("localhost/Download/VerifyFile");
Testwise我将DownloadFile替换为: webClient.DownloadString("localhost/Download/DownloadFile");
最初我也只有一个新的WebClient,但在第一次失败后添加了第二个.
服务器:
[RoutePrefix("Download")]
public class DownloadController : ApiController
{
    [HttpGet]
    [Route("DownloadFile")]
    public IHttpActionResult DownloadFile(int downloadId){
        return ResponseMessage(GetFile(downloadId));
    }
    private HttpResponseMessage GetFile(int downloadId){
        HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
        string filePath = GetFilePathFromDB(downloadid);
        if (filePath != String.Empty){
            var stream = new FileStream(filePath, FileMode.Open, …我正在使用代码将文件从一个位置复制到另一个位置,同时动态生成校验和.对于小文件,代码正常运行,但对于大文件,例如3.8GB文件,它表现得很奇怪:在大约1 GB复制后,它突然减速很快,然后越来越慢(例如在达到1 GB之前我观察到大约每秒复制2%-4%的文件,然后当达到1 GB时,每个文件的%需要大约4-6秒).
 int bytesRead = 0;
 int bytesInWriteBuffer = 0;
 byte[] readBuffer = new byte[1638400];
 byte[] writeBuffer = new byte[4915200];
 MD5 md5Handler = new MD5CryptoServiceProvider();
 using (FileStream sourceStream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    md5Handler.TransformBlock(readBuffer, 0, bytesRead, null, 0);
    FileStream destinationStream = File.Create(storageFileName);
    while (bytesRead = sourceStream.Read(readBuffer, 0, readBuffer.Length))
    {
        Buffer.BlockCopy(readBuffer, 0, writeBuffer, bytesInWriteBuffer, bytesRead);
        bytesInWriteBuffer += bytesRead
        if (bytesInWriteBuffer >= 4915200)
        {
             destinationStream.Write(writeBuffer, 0, bytesInWriteBuffer);
             bytesInWriteBuffer = 0;
             Thread.Sleep(50);
        }
    }
}   
正如评论中所提到的:没有可观察到的内存泄漏.在方法开始时内存使用量增加,然后保持稳定(运行它的PC上的总内存使用量,包括运行mthod的总时间为56%(对于在该PC上运行的所有应用程序)).PC的总内存为8 GB.
应用程序本身是32位(本身占用大约300 MB的内存),使用的框架是4.5.
作为测试后的更新评论提示:当我制作副本并通过令牌取消它并删除文件(所有减速开始后),并立即开始第二个复制过程,它与另一个一样慢在我取消它的时候(因此减速开始时已经在1 …
我有一个网页,我隐藏页面的内容,直到onloadJavaScript事件被触发,然后我取消隐藏内容.它在Chrome,IE11和IE10下运行良好.但是当我使用IE9时,内容的隐藏会被忽略,直到页面完全加载,此时隐藏才会生效.
由于这个问题,我将隐藏从JavaScript移到了CSS而且仍然具有相同的视觉效果.所以我的问题是:CSS是仅在html完全加载后应用还是我在这里忽略了什么?这里有一些代码:
#deactivate {  
    display: none;
}
<html>
    <body>
        <div id="deactivate">MycontentIsNotToBeShown</div>
        <div>MyContentIsToBeShown</div>
    </body>
</html>
$(document).ready(function() {
    //......DO things and then as the last step:
    $("#deactivate").first().show();   
});
就像我说的那样,"去激活"div的消失至少在jQuery代码开始工作之前不会发生(至少它看起来是光学的).
发生这种情况的整个页面是一个sharepoint页面(sharepoint 2013)...在视图模式下的nintex表单更精确.我不确定它是否与OR有任何关系,如果它与IE9中的内容加载顺序有关.因此,我的问题在于,如果它可能是IE9中如何加载/使用事物的顺序可能会导致这种影响?
另外需要注意的是:我已经检查过.css中是否有太多选择器,这看起来并非如此(我知道IE中有一个限制,它将在单个.css文件中处理多少个选择器) .
我目前正在使用文件流将文件从一个位置复制到另一个位置.直到现在,当我突然遇到File.open冻结正在运行的线程的问题时,这一切都按预期运行.
FileStream sourceStream = File.Open(filePath, FileMode.Open)
它仅适用于1个特定文件(大小为3 GB).有趣的是前一天它正常运行虽然这个文件所以它不能是文件大小.我检查的下一件事是,如果抛出一些我没有抓到的异常.
我把一个try/catch块整个(通常我使用调用方法来捕获异常)并且仍然具有相同的效果.
            try
            {
                FileStream sourceStream = File.Open(filePath, FileMode.Open);
                sourceStream.Close();
            }
            catch (Exception e)
            {
                Console.Write("A");
            }
我还检查了如果已经访问该文件会发生什么.然后抛出异常(对其他文件进行测试,就像我说的这个特定文件一样,当我尝试打开它时,它总是挂起线程).
该文件位于本地硬盘驱动器上,同一文件夹中的其他文件(虽然较小)不显示此问题.
由于我现在已经没有想法可能的原因,我的问题是:这种意外行为的可能原因是什么,以及它们如何被广告?
编辑:它现在再次起作用(就在我尝试使用过程监视器时,它再次开始运行).所以完全没有任何线索可能导致这种现象.如果有人知道这可能是什么原因,那么最好避免将来可能重复出现问题.
另外值得注意的是,在File.Open之前提出了一个问题我有一个使用块:
using (var stream = new BufferedStream(File.OpenRead(filePath), 1024 * 1024))
{
   //..do calculations
}
我用它来做一些关于文件的哈希计算.打开文件时没有任何问题(只有后来的File.Open有问题)
编辑:我刚从系统管理员那里收到了一个信息,它为问题提供了新的亮点:系统的设置方式使整个系统能够一次又一次地逐个备份,而不管操作系统是否具有任何知识.它.这意味着在备份文件的情况下操作系统认为它在那里并且没有人访问它,而实际上它当前正在备份(因此根据他们描述备份过程的方式访问并且无法从操作系统内访问它. ....由于操作系统不知道备份发生,资源硬盘访问和任务管理器中都没有显示.因此,根据该信息,可能是因为操作系统不知道正在访问的文件,它试图访问它(通过open命令)并等待并等待并等待硬盘驱动器读头到达从未发生过的文件它实际上无法访问).因此,它必须遇到file.open命令没有的超时(如果我在那里准确地理解了sys管理员的话,至少我猜有新的信息)
TNX
我在Apache服务器上使用Doctrine 2.2和php 5.3.
到目前为止,我偶然发现了以下问题:当我尝试更新datetime列时,我得到:SQLSTATE [22007]:[Microsoft] [SQL Server Native Client 10.0] [SQL Server]转换日期和/或时间时转换失败来自字符串.
我甚至走到了这么远的地方,然后使用它只用了1天来设置新的日期......相同的结果.
当我改为将数据库中的列和实体从datetime更改为日期时,它按预期运行.
我的主要问题是,有几个字段我需要使用datetime列.
这是我的代码:
(birthdate是我改为日期的专栏......并且是我可能的少数专栏之一):
//This returns the datetime object that represents birthdate from the database 
$help=$object->getBirthDate(); 
$help->setTimestamp(mktime($time[0],$time[1],$time[2],$date[2],$date[1],$date[0])); 
$help->format(\DateTime::ISO8601); 
$object->setBirthDate($help);
有人知道这里的解决方法吗?
我正在使用通用工厂类,其中通用部分是正在使用的派生类.正常用法很明确:BaseClass<DerivedA> C = new BaseClass<DerivedA>().现在虽然我正在尝试将属性注入到我使用这些类的类中.为此,我尝试将Type作为参数(以便我可以注入正在使用的派生类).
现在虽然我有点不知所措,尽管寻找例子并自己尝试.而我现在想知道:这样的构造是否可以使用?如果是这样,我如何实例化该类并使用Exists和ExistsB?
用法:
public class MyMainClass
{
    object _ClassInstance; // BaseClass<DerivedA> or BaseClass<DerivedB>
    public MyyMainClass(Type typeIWant)
    {
          .....
    }
}
....
MyMainClass a = new MyMainClass(typeof(DerivedA));
MyMainClass b = new MyMainClass(typeof(DerivedB));
通用类:
public abstract class BaseClass<T> where T: BaseClass<T>, new()
{
...
    public bool Exists(int a) {...}
}
派生类:
public class DerivedA :BaseClass<DerivedA>
{
...
}
public class DerivedB :BaseClass<DerivedB>
{
...
   public bool ExistsB(string a) {...}
}
c# ×8
file-io ×2
sql ×2
asp.net ×1
css ×1
datetime ×1
doctrine ×1
doctrine-orm ×1
generics ×1
html ×1
jquery ×1
list ×1
php ×1
transactions ×1
unit-testing ×1